2012-09-08 82 views
0

我有兩個表我想選擇所有記錄在cardId 2表中的位置,並且如果一個位置被映射到location_card表中,那麼地點的名稱如何獲得表A所有數據與表B只有與表A匹配的行A

它可以通過單獨查詢然後在腳本中加入它們,但是我想單個查詢。我試着用下面的查詢,但這個功能工作。

SELECT `cl`.`locationId`, `cl`.`cardId`, `l`.`name` 
FROM (`locations` as l) 
JOIN `location_cards` as cl ON `l`.`cardId` = `cl`.`cardId` 
WHERE `l`.`id` = '2' 



location_cards 
+---+-------------+-------+ 
|id | locationId |cardId | 
+---+-------------+-------+ 
| 1 | 1   | 1 | 
| 2 | 1   | 2 | 
| 3 | 3   | 2 | 
+---+-------------+-------+ 


locations 
+---+-------------+-------+ 
|id | name  |cardId | 
+---+-------------+-------+ 
| 1 | some  | 1 | 
| 2 | pla   | 2 | 
| 3 | sdsdffsdf | 2 | 
+---+-------------+-------+ 

回答

2

您需要更改爲LEFT JOIN,但它也出現在WHERE子句使用了錯誤的過濾器:

select c.locationid, 
    c.cardid, 
    l.name 
from locations l 
left join location_cards c 
    on l.cardid = c.cardid 
where l.cardid = 2 

看到SQL Fiddle with Demo

0

試着改變你的JOINLEFT JOIN和秩序的聯接。

SELECT `cl`.`locationId`, `cl`.`cardId`, `l`.`name` 
FROM `location_cards` as cl 
left JOIN `locations` as l ON `l`.`cardId` = `cl`.`cardId` 
WHERE `l`.`id` = '2' 
相關問題