MySQL 将 "select where id in select" 更改为某种连接

MySQL change "select where id in select" to some kind of join

情况:

我有一个table"trips"旅游

tripid    country   city
1         UK        London
2         US        New York
3         US        Las Vegas

我有一个 table "prices" 价格

tripid   price      duration
1        200        8
1        400        10
1        600        12
2        300        5
2        900        15
3        50         10
3        150        30

现在假设我想在美国进行所有价格在 50 到 200 之间的旅行

然后我使用这个 SQL 查询:

SELECT trip.* FROM `trips` WHERE `country` = 'US' AND `tripid` in 
(SELECT tripid FROM `prices` WHERE `price` BETWEEN 50 and 200 GROUP BY tripid)

当然这一个运行良好,但我的 table 正在增长,这是 SLOWWW。这是因为子查询效率很低

我该怎么做才能摆脱这部分并使其更快?

您可以在此处尝试使用 INNER JOIN 而不是子选择:

SELECT trip.* FROM trips INNER JOIN prices USING (tripid)
WHERE price BETWEEN 50 AND 200 AND country='US' GROUP BY tripid

确保你在 trips.country 上有一个索引用于你的 WHERE 子句,并且在 prices.[=14 上有一个索引可能也会有所帮助=] 用于 BETWEEN 子句。

如果您不想在结果中加入价格行,请使用 EXIST 子句:

SELECT t.*
FROM trips t
WHERE t.country = 'US' AND exists (select 1 FROM prices WHERE t.id = tripid AND price BETWEEN 50 and 200)

不需要任何 GROUP 子句。