在MySQL中,我有2个表和一个类似的查询:
SELECT t1.id, t1.desc_short, t2.body FROM table1 t1, table2 t2 WHERE t1.desc_short = t2.name AND t1.id = 100321654
table1包含Objects,table2包含它们的字符串名称(table2,table3,...,tableN是语言表)
我的问题是,在t1我有专栏' name'这是对象的名称,所以我去table2找到它的字符串,我在t1中也有一列' desc'这是对象的描述,它也可以在table2中找到,但不是同一行。
table1(object)就像:
id | desc_short | desc_long
169461235 | STR_DESC_SHORT1 | STR_DESC_LONG1
表2如下:
id | name | body
10000 | STR_DESC_SHORT1 | name of object 169461235
10354 | STR_DESC_LONG1 | desc of object 169461235
在一个只返回一行的SQL查询中,是否有可能捕获一个特定对象的名称和描述?
编辑:添加了表格示例。很抱歉列名混乱。因此,在一个返回一行的SELECT中,我需要:
id | desc_short | desc_long
169461235 | name of object 169461235 | desc of object 169461235
答案 0 :(得分:1)
您需要两次加入“字符串表”,如下所示:
SELECT t1.id, nameTbl.body AS `nameStr`, descTbl.body AS `descStr`
FROM table1 AS t1
INNER JOIN table2 AS nameTbl ON t1.DESC_SHORT = nameTbl.name
INNER JOIN table2 AS descTbl ON t1.DESC_LONG = descTbl.name
WHERE t1.id = 100321654
;
答案 1 :(得分:0)
如果对象名称相同,则可以使用
SELECT t1.id, t1.name, t2.body
FROM table1 t1, table2 t2
WHERE t2.body like concat('%', t1.id, '%')
OR t2.body like concat('%', t1.id)
OR t2.body like concat( t1.id, '%')
AND t1.id = 100321654
答案 2 :(得分:0)
您可以在示例中按两次加入表格,但如果可能的话,我会选择一些更具描述性的字段名称:
SELECT t1.id
,t2name.body as DESC_SHORT
,t2desc.body as DESC_LONG
FROM table1 t1
LEFT JOIN
table2 t2name WHERE t1.DESC_SHORT = t2.name
LEFT JOIN
table2 t2desc WHERE t1.DESC_LONG = t2.name