首页 > 解决方案 > 在第二个查询中使用带有 IN 子句的第一个查询中的选定列

问题描述

问题已在下面重新创建:

/* query - 1 */
Select id, title from table1;

/* returns */

id | title
-----------
1  | data-1
2  | data-2
3  | data-3
4  | data-4
5  | data-5

我想在第二个查询中将此列 id 的数据与 IN 子句一起使用。像这样的东西:

Select id, title from table1
JOIN
Select anotherColumn from table2 where table2.id IN (1,2,3,4,5) on table1.id = table2.id

1,2,3,4,5如何在第二个查询中使用从第一个查询中选择的列数据,而不是手动编写?

编辑:

实际查询:

SELECT *
FROM
(
    SELECT R.id, U.ic_id as rider, U.name, DP.department_name, R.location,
        (R.distance - 1) + 10 as cost , R.timestamp, R.status 
    FROM requests AS R, iconnect.users AS U, iconnect.departments AS DP
    WHERE R.pool = '125' AND R.rider = U.ic_id AND U.department = DP.id
) requestDetails
JOIN
(
    SELECT AVG(rider_rating) AS rider_rating,rider
    FROM
    (
        SELECT rider_rating, R.rider
        FROM journeys AS J, requests AS R
        WHERE J.req_id = R.id AND R.rider IN (12,13) LIMIT 999999
    ) AS allRatings
    GROUP BY rider
) ratingsTable
    ON requestDetails.rider = ratingsTable.rider

/* instead of (12,13) I want to use requestDetails.rider selected from the first derived table */

标签: mysqljoinin-clause

解决方案


一种选择是使用一个EXISTS子句:

SELECT id, title
FROM table1 t1
WHERE EXISTS (SELECT 1 FROM table2 t2 WHERE t1.id = t2.id);

实际上,两个表之间的简单内部连接也可以工作。但是,您可能希望SELECT DISTINCT在给定记录 intable1匹配多个记录的情况下使用table2. 这将给我们留下这个:

SELECT DISTINCT t1.id, t1.title
FROM table1 t1
INNER JOIN table2 t2
    ON t1.id = t2.id;

推荐阅读