MySQL三表连接

时间:2016-05-06 11:36:22

标签: mysql sql select join

我有三张桌子

表1

userid  mobile
1       123456789
2       321654987
3       987456321

表2

revid   userid  revdes  mobile
1       2       ASD     123456789
2       2       DSA     123456348
3       1       QWE     963258124

表3

revid   revloc
1       asdf
3       dsaq

我希望输出像userid = 2

这样的输出
userid  revid    revdes     mobile      revloc  inTable1
2       1        ASD        123456789   asdf    true
2       2        DSA        123456348   NULL    false

在上面的输出inTable1列中,第1行元素为true,因为移动" 123456789"可在表1中找到

我正在使用MySQL。

4 个答案:

答案 0 :(得分:0)

您可以使用一系列左连接来实现您想要的效果。您查询的棘手部分是知道使用移动电话号码加入Table1Table2,而不是用户ID。

SELECT t2.userid, t2.revid, t2.revdes, t2.mobile, t3.revloc,
    t1.mobile IS NOT NULL AS inTable1
FROM Table2 t2 LEFT JOIN Table1 t1
    ON t2.mobile = t1.mobile
LEFT JOIN Table3 t3
      ON t2.revid = t3.revid
WHERE t2.userid = 2

请按照以下链接查看正在运行的演示:

SQLFiddle

答案 1 :(得分:0)

您可以使用left join并检查结果列是否为null

SELECT    t2.userid, t2.revid, t2.revdes, t2.mobile, t3.revloc, 
          t1.mobile IS NOT NULL AS inTable1
FROM      table2 t2
JOIN      table3 t3 ON t2.revid = t3.revid
LEFT JOIN table1 t1 ON t2.mobile = t1.mobile

答案 2 :(得分:0)

这是一个希望它有帮助的查询:

SELECT Table1.userid, Table2.revid, Table2.revdes, Table2.mobile, Table3.revloc, IF(Table1.mobile = Table2.mobile, true, false) as inTable1
FROM Table1 
JOIN Table2 ON Table2.userid = Table1.userid 
JOIN Table3 ON Table2.revid = Table3.revid 

答案 3 :(得分:0)

SELECT t2.userid, t2.revid, t2.revdes, t2.mobile, t3.revloc,
    CASE WHEN (SELECT t4.mobile from Table1 t4 where t4.userid = T2.userid) = T2.mobile
    THEN true ELSE false END AS inTable1
FROM Table1 t1, Table2 t2, Table3 t3
WHERE (t2.userid = t1.userid) AND (t2.revid = t3.revid)