MySQL查询&加入

时间:2013-10-16 13:26:18

标签: mysql sql database join

我有两张桌子..

devices(id, brand_id, device_name)
brands(id, brand_name)

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

2 个答案:

答案 0 :(得分:1)

INNER 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);

答案 1 :(得分:1)

是的,您需要JOIN语法,例如:

SELECT DISTINCT
  brands.*
FROM
  brands
    LEFT JOIN devices
      ON brands.id=devices.brand_id
WHERE
  devices.id IS NOT NULL