仅当字段不为空时才进行内部连接

时间:2011-05-12 14:26:04

标签: mysql join

我可以通过两个请求完成我想要的任务,但我想只用一个。

事实上,我有4个表:

Table 1 : id, sub-id
Table 2 : id, sub-id
Table 3 : id, login
Table 4 : id, login

我提出这样的请求:

SELECT Table1.id, Table1.sub-id, Table2.id, Table2.sub-id, 
   Table3.login, Table4.login FROM Table1
   INNER JOIN Table2 ON (Table1.id = Table2.id AND Table1.sub-id = Table2.sub-id)
   INNER JOIN Table3 ON (Table3.id = Table1.id)
   INNER JOIN Table4 ON (Table4.id = Table1.id)
   WHERE Table1.id = "my_id" AND Table1.sub-id = "my_subid"

我希望只有在Table3不为空时加入id,如果它为空,我加入Table4

你有什么想法吗?

我听说左连接可以提供帮助,但我不习惯这些关键字,所以......?

5 个答案:

答案 0 :(得分:9)

与其他答案中的说法一样,您可以使用左连接。您还可以添加case statement只有一个login列:

SELECT 
    Table1.id, 
    Table1.sub-id, 
    Table2.id, 
    Table2.sub-id, 
    CASE 
        WHEN Table3.id IS NOT NULL THEN Table3.login
        ELSE Table4.login
    END CASE AS login
FROM Table1
INNER JOIN Table2 ON (Table1.id = Table2.id AND Table1.sub-id = Table2.sub-id)
LEFT JOIN Table3 ON (Table3.id = Table1.id)
LEFT JOIN Table4 ON (Table4.id = Table1.id)
WHERE Table1.id = "my_id" AND Table1.sub-id = "my_subid"

答案 1 :(得分:5)

使用左连接:

SELECT Table1.id, Table1.sub-id, Table2.id, Table2.sub-id, 
Table3.login, Table4.login FROM Table1
INNER JOIN Table2 ON (Table1.id = Table2.id AND Table1.sub-id = Table2.sub-id)
LEFT JOIN Table3 ON (Table3.id = Table1.id)
LEFT JOIN Table4 ON (Table4.id = Table1.id)
WHERE Table1.id = "my_id" AND Table1.sub-id = "my_subid"

然后,如果匹配,将连接Table3和Table4中的行。否则,这些将是NULL。然后,您可以检查结果并使用Table3中的数据(如果存在),否则使用Table4。

答案 2 :(得分:2)

这可能会有所帮助:

SELECT Table1.id, Table1.sub-id, Table2.id, Table2.sub-id, 
   Table3.login, Table4.login FROM Table1
   INNER JOIN Table2 ON (Table1.id = Table2.id AND Table1.sub-id = Table2.sub-id)
   LEFT JOIN Table3 ON (Table3.id = Table1.id)
   LEFT JOIN Table4 ON (Table4.id = Table1.id)
   WHERE Table1.id = "my_id" AND Table1.sub-id = "my_subid"

答案 3 :(得分:2)

尝试这样的事情:

SELECT Table1.id, Table1.sub-id, Table2.id, Table2.sub-id, 
    COALESCE(Table3.login, Table4.login) AS login
FROM Table1
INNER JOIN Table2 ON Table1.id = Table2.id AND Table1.sub-id = Table2.sub-id
LEFT JOIN Table3 ON Table3.id = Table1.id
LEFT JOIN Table4 ON Table4.id = Table1.id
WHERE Table1.id = 'my_id' AND Table1.sub-id = 'my_subid'

我删除了不必要的括号以减少混乱。另请注意,SQL中的标准字符串分隔符是单引号。

答案 4 :(得分:2)

如果对于任何table1.id只有 table3.id 或仅 table4.id匹配,您可以使用以下内容:< / p>

SELECT
    Table1.id
  , Table1.sub-id
  , Table2.id
  , Table2.sub-id
  , COALESCE(Table3.login, Table4.login)
    AS login

FROM Table1
  INNER JOIN
     Table2 ON (Table1.id = Table2.id
            AND Table1.sub-id = Table2.sub-id)
  LEFT JOIN
     Table3 ON (Table3.id = Table1.id)
  LEFT JOIN
     Table4 ON (Table4.id = Table1.id)

WHERE Table1.id = "my_id"
  AND Table1.sub-id = "my_subid"
相关问题