SUbquery correlated



我正在尝试进行相关的子查询,但没有得到正确的答案。我试着查询"suv"车辆,在这款suv车辆中,我想要宝马制造的车辆,但我得到的所有车辆都是suv。我该怎么办?

-- create a table
CREATE TABLE Cars (
id INTEGER PRIMARY KEY,
CarName varchar(50),
vehicle_type varchar(50),
Automaker varchar(50),
Price INTEGER 

);
-- insert some values
INSERT INTO Cars VALUES 
(1, 'BMW X6',  'SUV','BMW', 108200),
(2, 'BMW X6',  'SUV','BMW',88200),
(3,'Grand Cherokee','SUV','JEEP' ,21678),
(4,'Grand Cherokee','SUV','JEEP' , 24518),
(5,'Grand Cherokee','SUV','JEEP' , 27548),
(6,'BMW 320','Sedan','BMW' , 54518),
(7,'AUDI A8','Sedan','AUDI' , 64518);
SELECT * FROM Cars WHERE vehicle_type =  (SELECT vehicle_type from Cars WHERE Automaker = 'BMW');

所问的问题没有什么意义,因为底部的代码可以写得更简单。。。不需要子查询:

SELECT * 
FROM Cars 
WHERE vehicle_type = 'SUV' AND Automaker = 'BMW';

为了让它更有趣,让我们假设你想得到与宝马制造的任何汽车相同类型的所有汽车。在这种情况下,我们看到宝马生产SUV和轿车,所以我们想获得所有这些,但我们希望"宝马"作为查询的唯一输入。

我之所以选择它,是因为它更像最初的查询。我认为如果你看到这个代码实际在做什么,它会帮助你学习。然而,我们确实需要两个调整:

SELECT * 
FROM Cars 
WHERE vehicle_type IN  (SELECT DISTINCT vehicle_type from Cars WHERE Automaker = 'BMW');

仅在用IN替换=并向子查询添加DISTINCT时发生更改。

您可以像下面这样编写:

SELECT * FROM Cars WHERE vehicle_type = 'SUV' and Automaker='BMW';

这选择了类型为"uv"的汽车和宝马制造的汽车的所有细节。

最新更新