mySQL记录集中的记录太多,连接错误?

时间:2014-04-02 08:49:56

标签: mysql sql

我有两张桌子:

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';

有人能指出我做错了什么,我似乎无法抓住它......

4 个答案:

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