[英]Join using case statement
我有兩張桌子
tbl_cid
-------------------------
| cid | sid | rid | dt |
-------------------------
| 1 | 101 | 103 | xxx |
| 6 | 104 | 101 | xxx |
| 8 | 104 | 103 | xxx |
| 9 | 105 | 104 | xxx |
-------------------------
tbl_uid
--------------
| uid | name |
--------------
| 101 | john |
| 103 | tim |
| 104 | paul |
| 105 | alex |
--------------
SELECT u.name, c.cid, c.sid, c.rid FROM tbl_cid c
JOIN tbl_uid u on u.uid = c.sid
WHERE c.sid = 101 OR c.rid = 101
Expected result:
--------------------
| cid | uid | name |
--------------------
| 1 | 103 | tim |
| 6 | 104 | paul |
--------------------
我以不同的方式嘗試過,但找不到。 說如果我正在tbl_cid
搜索101(如果sid有101,則加入rid),如果rid有101,然后加入sid。 任何幫助是極大的贊賞。 謝謝
我認為這是您要尋找的:
select tbl_cid.cid, tbl_uid.uid, tbl_uid.name
from tbl_cid, tbl_uid
where (tbl_cid.sid = tbl_uid.uid AND tbl_cid.rid = 101) OR (tbl_cid.rid = tbl_uid.uid AND tbl_cid.sid = 101);
Result:
--------------------
| cid | uid | name |
--------------------
| 1 | 103 | tim |
| 6 | 104 | paul |
--------------------
我實際上不同意@wdika,您應該使用聯接,因為對兩個表使用where子句只會隱式執行聯接。
SELECT u.name, c.cid, c.sid, c.rid FROM tbl_cid c
JOIN tbl_uid u on u.uid = c.sid or u.uid = c.rid
WHERE (c.sid = 101 OR c.rid = 101) and u.uid != 101;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.