我有两张桌子..
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
答案 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