Mysql复杂选择
我有三个表“硬件型号”、“仓库”和“品牌”,表是以这种方式一起引用的: 硬件模型仓库 五金模型品牌 现在我想执行以下查询:选择“brand_id等于”10“的所有“warehouse”对象。场外仓库和品牌未连接,因此它们之间不存在外键。我试着说:Mysql复杂选择,mysql,Mysql,我有三个表“硬件型号”、“仓库”和“品牌”,表是以这种方式一起引用的: 硬件模型仓库 五金模型品牌 现在我想执行以下查询:选择“brand_id等于”10“的所有“warehouse”对象。场外仓库和品牌未连接,因此它们之间不存在外键。我试着说: SELECT * FROM warehouses where hardware_id = (SELECT * FROM hardwares where brand_
SELECT *
FROM warehouses
where hardware_id = (SELECT *
FROM hardwares
where brand_id='10')
但它不起作用!
其中hardware_id是“warehouse table”字段,brand_id是“hardware table”字段。
有什么建议吗?它不起作用,因为子查询返回多个列,可能还返回多个行。您应该能够通过连接执行此操作:
hardware.id应替换为任何关键的warehouse.hardware\u id引用。即使您没有指定外键约束,您仍然可以联接表。令人惊讶的是,不会在一个大堆中倒下的
SELECT * FROM warehouses
where hardware_id in (SELECT hardware_id FROM hardwares where brand_id='10')
这听起来像是一个简单的多表联接。你只需要按照我只能猜测的表格结构做一些事情
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;
只是猜猜你的桌子,但也许
SELECT w1.*
FROM warehouses w1,
hardware h1
where w1.hardware_id = h1.hardware_id
and h1.brand_id=10
您的仓库表中是否有硬件标识?如果没有,你在哪里建立你的仓库和其中的内容之间的关系?MySQL不能像这样很好地优化子选择,因此连接更有可能以最佳方式运行。我想你指的是硬件选择。。。在中对其进行了修改,并进行了相应的修改。我更喜欢加入我自己,但我想在选择点*从从来没有工作…是的,我已经说过硬件的id是在我的仓库表
SELECT w1.*
FROM warehouses w1,
hardware h1
where w1.hardware_id = h1.hardware_id
and h1.brand_id=10