0

私は2つのテーブルを持っています..

デバイス (id、ブランド ID、デバイス名)
ブランド(id, brand_name)

デバイス テーブルにデバイスが 1 つも含まれていないブランドが多数あります。基本的に、デバイスが 1 つも含まれていないブランドは無視したいと思います。

以下の行を使用して、デバイスにエントリがあるため、デバイス テーブルにエントリがあるすべてのブランドのみにクエリを返すにはどうすればよいですか (brand_id はデバイス テーブルの外部キーです) - これには結合が必要ですか?

例: テーブル構造

brands table:
id  name
1   apple
2   samsung
3   acme

devices table:
id    brand_id  name
1     1         iphone
2     2         galaxy s4
3     1         ipad

# desired db result #
1 Apple
2 Samsung
4

2 に答える 2

1

を使用するINNER JOINと、デバイスを持つすべてのブランドを取得できます。ブランドがデバイスごとに 1 回返されないように、brand.id でグループ化します。

SELECT brands.* 
FROM brands
INNER JOIN devices ON (brands.id = devices.brand_id)
GROUP BY brands.id

別の方法はサブクエリを使用することですが、結合が高速になると思います。

SELECT * 
FROM brands 
WHERE id IN (SELECT brand_id FROM devices);
于 2013-10-16T13:30:21.103 に答える
1

JOINはい、次のような構文が必要です。

SELECT DISTINCT
  brands.*
FROM
  brands
    LEFT JOIN devices
      ON brands.id=devices.brand_id
WHERE
  devices.id IS NOT NULL
于 2013-10-16T13:30:22.430 に答える