0

結合されたテーブル内のどの行をインポートするかについて追加の条件がある場合、結合を行う方法を理解するのに苦労しています。

メンバー

id|name

連絡先

id|name

メンバー連絡先

id|memberid|contactid|myid

1|1|33|2
2|1|34|3

SELECT m.*,c.*,cm.* 
FROM `members` m
LEFT JOIN `contacts`c
  ON c.memberid = m.id
LEFT JOIN `membercontact` mc
  ON m.id = mc.memberid AND mc.myid ='3'
WHERE m.id = '2'
GROUP BY m.id

動作しません。一方、mc.myid = 3 条件を削除すると、m.id = mc.memberid、つまり m.id = 2 の最初のケースが返されますが、これは私が望むものではありません。

誰でもこれを行う適切な方法を提案できますか? ありがとうございました。

4

1 に答える 1

2

あなたのクエリは次を使用していますleft join:

SELECT m.*,c.*,cm.* 
FROM `members` m LEFT JOIN
     `contacts`c
      ON c.memberid = m.id LEFT JOIN
     `membercontact` mc
      ON m.id = mc.memberid AND mc.myid ='3'
WHERE m.id = '2'
GROUP BY m.id;

それが機能するため、すべてのメンバーを返しますleft join。物事をフィルタリングしたい場合は、を次のように変更left joininner joinます。

SELECT m.*,c.*,cm.* 
FROM `members` m INNER JOIN
     `contacts`c
      ON c.memberid = m.id INNER JOIN
     `membercontact` mc
      ON m.id = mc.memberid AND mc.myid ='3'
WHERE m.id = '2'
GROUP BY m.id;
于 2013-09-13T12:07:39.817 に答える