SQL Select必须在1行中返回2个表中的2个不同值

时间:2016-08-17 16:55:44

标签: mysql

在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

3 个答案:

答案 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