[英]MySQL query from different tables with same city
表格:
Processor(_pid_, brand, clockSpeed, supplierCity)
Memory(_mid_, brand, capacity, supplierCity)
Harddrive(_hdid_, brand, capacity, RPM, supplierCity)
PC(_pcid_, _mid_, _pid_, _hdid_, model, price, cost)
我正在尝试建立一个查询:
Find's the PC model whose price is less than 1000 pounds and for which
the memory and the processor are supplied from the same city
我的当前查询返回相同结果的多次重复:
SELECT pc.model FROM pc, memory, processor WHERE
memory.supplierCity=processor.supplierCity AND pc.price<1000;
SELECT *
FROM pc
WHERE price < 1000
AND EXISTS
(
SELECT NULL
FROM processor p
JOIN memory m
USING (supplierCity)
WHERE (p._pid_, m._mid_) = (pc._pid_, pc._mid_)
)
正如vkp在评论中说的那样,请尽量避免使用逗号表示法( 这种情况有用且不仅懒惰的情况通常很简单,也很少见 )。 而且,就像vkp所说的那样, pc
没有加入,如下所示。
SELECT pc.model
FROM pc
INNER JOIN memory ON pc.`_mid_` = memory.`_mid_`
INNER JOIN processor ON pc.`_pid_` = processor.`_pid_`
WHERE pc.price<1000
AND memory.supplierCity=processor.supplierCity
;
AND
部分可以移到第二个ON
子句,并且根据您的数据可能会更有效; 但是从概念上讲,这更容易解释。
它获取所有PC记录的列表及其相应的内存和处理器,然后保留结果,其中PC的价格低于1000,并且内存和处理器由同一座城市提供。 但是,由于MySQL通常是如何处理查询的,很有可能会首先获得价格低于1000的pc条目列表,然后为每个条目查找内存和处理器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.