-1

何時間も探していましたが、解決策が見つかりません。少し複雑なので、非常に簡単な例に分解します

2 つのテーブルがあります。人と車

人:

name_id    firstname
  1          john
  2          tony
  3          peter
  4          henry

車:

name_id   car_name
   1      vw gulf
   1      ferrari
   2      mustang
   4      toyota

ご覧のとおり、それらは name_id によってリンクされており、ジョンは 2 台、トニーは 1 台、ピーターは 0 台、ヘンリーは 1 台の車を所有しています。

誰が(1台以上)車を持っているかについて、単一のmysql検索を実行したいだけです。したがって、答えはジョン、トニー、ヘンリーでなければなりません。

people テーブルはマスターテーブルでLEFT JOIN、車を追加するために使用しています。私の問題は重複から発生します。結合しているテーブルには、マスターの1つのIDに対して2つのエントリがあるという事実。

私は遊んでいDISTINCTますGROUP BYが、うまくいかないようです。

どんな助けでも大歓迎です。

編集:クエリを追加:

$query = "
SELECT profiles.*, invoices.paid, COUNT(*) as num 
FROM profiles 
    LEFT JOIN invoices ON (profiles.id=invoices.profileid) 
WHERE (profiles.id LIKE '%$id%') 
GROUP BY invoices.profileid
";
4

3 に答える 3

0

これを試して
select distinct p.name_id, firstname from people p, cars c where p.name_id = c.name_id

または結合を使用する
select distinct p.name_id, firstname from people p inner join cars c on p.name_id = c.name_id

于 2013-02-16T19:02:23.517 に答える
0
SELECT DISTINCT firstname 
FROM people 
    JOIN cars ON cars.name_id = people.name_id;

これでうまくいかない場合は、問題全体を表示する必要があるかもしれません。

それを提案する方法は、1人あたり少なくとも車が必要なので、左結合の必要はありません. 左結合は暗黙的に OUTER 結合であり、結合されたテーブルに対応するレコードがない結果を返すことを目的としています。

于 2013-02-16T18:56:23.557 に答える
0

If you only want to show people that have a car, then you should use a RIGHT JOIN. This will stop any results from the left table (people) to be returned if they didn't have a match in the cars table.

Group by the persons name to remove duplicates.

SELECT firstname
FROM people P
RIGHT JOIN cars C ON C.name_id = P.name_id
GROUP BY firstname
于 2013-02-16T19:06:50.993 に答える