0

2つのテーブルがあり、cardId 2を使用してテーブルの場所に存在するすべてのレコードを選択します。場所がlocation_cardテーブルにマップされている場合は、場所の名前

個別のクエリを作成してからスクリプトで結合することで実行できますが、単一のクエリで取得したいと思います。私は以下のクエリで試しましたが、それはうまくいきます。

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   | 
+---+-------------+-------+
4

2 に答える 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 FiddlewithDemoを参照してください

于 2012-09-08T18:26:32.950 に答える
0

結合の順序を変更JOINしてみてください。LEFT 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'
于 2012-09-08T18:22:07.287 に答える