0

我有两张桌子..

设备(id、brand_id、device_name)
品牌(ID,品牌名称)

我在设备表中有许多没有单个设备的品牌,我基本上想忽略这些没有至少 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

AnINNER JOIN将让您抓住所有拥有设备的品牌。我们按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 回答