Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql复杂选择_Mysql - Fatal编程技术网

Mysql复杂选择

Mysql复杂选择,mysql,Mysql,我有三个表“硬件型号”、“仓库”和“品牌”,表是以这种方式一起引用的: 硬件模型仓库 五金模型品牌 现在我想执行以下查询:选择“brand_id等于”10“的所有“warehouse”对象。场外仓库和品牌未连接,因此它们之间不存在外键。我试着说: SELECT * FROM warehouses where hardware_id = (SELECT * FROM hardwares where brand_

我有三个表“硬件型号”、“仓库”和“品牌”,表是以这种方式一起引用的: 硬件模型仓库 五金模型品牌

现在我想执行以下查询:选择“brand_id等于”10“的所有“warehouse”对象。场外仓库和品牌未连接,因此它们之间不存在外键。我试着说:

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