Mysql Complex SELECT

时间:2012-03-14 17:55:21

标签: mysql

我有三个表'Hardware_model','Warehouse'和'Brand',表格以这种方式引用: Hardware_model< - >仓库 Hardware_model< - >品牌

现在我要执行以下查询:选择'brand_id等于'10'的所有'仓库'对象。非课程仓库和品牌没有加入,因此它们之间不存在外键。我正在尝试这样的事情:

SELECT * 
FROM warehouses 
where hardware_id = (SELECT * 
                    FROM hardwares 
                    where brand_id='10')

但它不起作用! 其中hardware_id是'仓库表'字段,brand_id是'硬件表'字段。 有什么建议吗?

4 个答案:

答案 0 :(得分:1)

这听起来像一个简单的多表连接。你只需要做一些事情(我只能猜测表结构)。

SELECT w.* FROM warehouses w
JOIN hardwares h ON w.hardware_id = h.hardware_id
JOIN brands b ON h.brand_id = b.brand_id
WHERE brand_id=10;

答案 1 :(得分:0)

它不起作用,因为您的子查询返回多个列,可能还有多行。您应该可以使用JOIN

执行此操作
SELECT *
FROM warehouses
JOIN hardwares ON warehouses.hardware_id = hardwares.id
WHERE brand_id = '10'

hardwares.id应替换为任何键warehouses.hardware_id引用。即使您未指定FOREIGN KEY约束,仍可以连接表。

答案 2 :(得分:0)

在大堆中没有倒下的已经过时应该像

SELECT *  FROM warehouses  
where hardware_id in (SELECT hardware_id FROM hardwares where brand_id='10')

答案 3 :(得分:0)

只是猜测你的牌桌,但也许

SELECT w1.*  
FROM warehouses w1,
     hardware   h1
 where w1.hardware_id = h1.hardware_id
 and h1.brand_id=10

仓库表中是否有hardware_id?如果没有,你在哪里建立仓库与其中的关系?