SQL select无论是不同的还是不相同(count大于零)

时间:2013-06-19 23:18:34

标签: mysql insert distinct

我发现很多方法只显示不同的结果,但我如何同时选择不同的和非不同的?请考虑以下表格:

    A
    ---------------------------------
    |    id    |   col1   |   col2  |
    ---------------------------------
    |    1     |    aa    |   dd    |
    ---------------------------------
    |    1     |    bb    |    ee   |
    ---------------------------------
    |    2     |    cc    |    ff   |
    ---------------------------------

    B
    ---------------------------------
    |    id    |   col1   |   col2  |
    ---------------------------------
    |    1     |    a     |    d    |
    ---------------------------------
    |    2     |    b     |    e    |
    ---------------------------------
    |    3     |    c     |    f    |
    ---------------------------------

    C
    ---------------------------------
    |    id    |   col1   |   col2  |
    ---------------------------------
    |    1     |    x     |    1a   |
    ---------------------------------
    |    2     |    y     |    2b   |
    ---------------------------------
    |    3     |    x     |    3c   |
    ---------------------------------

用户向我提供了一个id和一列列,比如id = 1和columns =(a.col1,b.col1和c.col2)。我将如何构建查询以向我提供id匹配的所有列信息,无论id出现多少次?

我目前的查询是:

    SELECT a.col1, b.col1, c.col2
    FROM a
        LEFT JOIN b
            ON b.id = a.id
        LEFT JOIN c
            ON  c.id = b.id
    WHERE a.id = 1

问题是,当我想获得两个结果时(或者任何恰好具有匹配的重复ID的表的所有结果),这只能给出表A中的一个结果。注意:在表A中,列id和col1一起构成了主键,这就是我重复ID的原因。

连连呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

在问题的数据中,表A中没有重复的id。查询应该只从A返回一行,然后。

但是,您的查询有错误。第二个连接应该回到第一个表,而不是第二个表:

SELECT a.col1, b.col1, c.col2
FROM a
    LEFT JOIN b
        ON b.id = a.id
    LEFT JOIN c
        ON  c.id = a.id
WHERE a.id = 1

如果该表中没有匹配项,则c.id = b.idb.id可能为NULL。

另外,根据您的描述,我想知道union是否是最佳方法:

select a.col1, 'a'
from a
where id = 1
union all
select b.col1, 'b'
from b
where id = 1
union all
select c.col2, 'c'
from c
where id = 1