mysql中需要的所有条件数据

时间:2013-07-25 06:30:06

标签: mysql sql database

我有三个表abcid之间有共同点。

Table a:-
id      name      value
 1        a         4
 2        v          6

Table b:-
id      abc
 2        54
 3        56

Table c:-
id       bcd
1         54
3         34

现在我想要的是条件,数据来自所有表格的id。

请告诉我如何做到这一点。

预期结果 -

如果查询

select * from a left join b on a.id=b.id left join c on a.id=c.id where b.id=3

id  name   value   bcd   abc
3    NULL  NULL    34    56

如果查询

select * from a left join b on a.id=b.id left join c on a.id=c.id where a.id=1

id  name   value   bcd   abc
3    a      4       54    NULL

4 个答案:

答案 0 :(得分:3)

这种解决问题的方法怎么样? :)

SELECT 
    z.id,
    a.name,
    a.value,
    c.bcd,
    b.abc
FROM 
    (
        SELECT
            DISTINCT y.id id
        FROM
            (
                SELECT id FROM a
                    UNION ALL
                SELECT id FROM b
                    UNION ALL
                SELECT id FROM c
            ) y     
    ) z
    LEFT JOIN a ON z.id = a.id
    LEFT JOIN b ON z.id = b.id
    LEFT JOIN c ON z.id = c.id
where z.id = 3

sql fiddle

这样你只需要给查询一个不关心它存在于哪个表中的数字。

答案 1 :(得分:1)

这取决于您在WHERE条件下设置的内容。如果您要设置WHERE b.ID = 3,那么您需要加入其他表格,如下所示:

SELECT A.ID AS A_ID,A.Name, A.value
      ,B.Id as B_ID,B.abc
      ,C.id AS C_ID, c.bcd 
  FROM b 
  LEFT JOIN a ON a.id = b.id 
  LEFT JOIN c ON a.id = c.id 
 WHERE b.id=3;

这是因为{A}不在表A中,表C与表A连接。 如果您设置表A.ID = 1,那么您必须使用b.ID = 3加入其他表,如下所示:

LEFT JOIN

请参阅this SQLFiddle

答案 2 :(得分:0)

这在技术上是不可能的,当你使用ID在哪里可以获得数据,以防任何特定表中没有id,你正在改变where;)的逻辑。

但你可以做的是

SELECT * FROM (选择AID作为ID,名称,来​​自A的值 联盟 选择BID作为ID,NAME,NULL作为B的值 联盟 SELECT CID as ID,NAME,NULL AS VALUE FROM C) WHERE ID =''

希望这有帮助

否则请澄清。你想要什么。

此致

Ashutosh Arya

答案 3 :(得分:0)

我会尽力猜测,即使我几乎找不到对预期结果的解释:

SELECT 
    b.id,
    a.name,
    a.value,
    c.bcd,
    b.abc
FROM 
    b
    INNER JOIN c ON b.id = c.id
    LEFT JOIN a ON b.id = a.id

sql fiddle