我有两张桌子:
Table 1 ( id, name, description )
Table 2 ( id, table1id, type, value)
现在我想选择“表1”中的所有记录,以显示它们是否在“表2”中有值。这是有效的,但是如果“表2”包含“type = color”的多个记录并且具有相同的“table1.id”,我只想看到返回的1条记录。现在我收到了多条记录。
这是我的SQL命令:
SELECT DISTINCT table1.*, t2.value
FROM table1
LEFT JOIN table2 t2
ON t2.table1id = table1.id AND t2.type = 'color';
有人能指出我做错了什么,我似乎无法抓住它......
答案 0 :(得分:1)
使用group by
代替distinct
:
SELECT t1.*, group_concat(t2.value) as t2values
FROM table1 t1 LEFT JOIN
table2 t2
ON t2.table1id = t1.id AND t2.type = 'color'
GROUP BY t1.id;
如果您只想要一个值,则可以使用min()
或max()
代替group_concat()
。
答案 1 :(得分:0)
如果您只需要表2中的value
,则可以使用相关子查询
SELECT t1.*,
(SELECT value FROM table2 WHERE table1id = t1.id AND `type` = 'color' LIMIT 1) `value`
FROM table1 t1
答案 2 :(得分:0)
您想要查看table1记录,因此请选择table1记录。不要加入。要查看table2中是否存在值,您可以使用计数选择来查看您获得的匹配项数:
SELECT table1.*, (select count(*) from table2 t2 WHERE t2.table1id = t1.id AND t2.type = 'color')
FROM table1 t1;
答案 3 :(得分:0)
试试这个,
SELECT t1.*, t.value FROM table1 as t1
outer apply
(
select top 1 * from table2 t2
where t1.id=t2.id and t2.type = 'color'
order by id desc
)as t