如何使用子查询显示2个表中的不同列

时间:2017-04-14 21:25:51

标签: mysql subquery

我有2个表,这些表与共享列customer_id相关:

  • customer
  • rental

我需要在rental_id表格中显示last_updaterental。 此外,active表中的customeractive为false

我搜索了多个网站,以及Stack Overflow上的几个问题,这是我得到的最接近的网站:

SELECT rental_id, last_update, active
FROM rental
WHERE customer_id IN
    (SELECT customer_id
     FROM customer
     WHERE active = false);

提前感谢您的帮助。

编辑:我必须使用子查询,因为这是一个学校项目,因此内部联接答案无济于事。遗憾。

2 个答案:

答案 0 :(得分:0)

尝试这样的查询。它使用INNER JOIN而不是subselect

SELECT
    r.rental_id,
    r.last_update,
    c.active
FROM rental r
INNER JOIN 
    customer c ON c.cusomer_id = r.customer_id
WHERE
    c.active = FALSE;

答案 1 :(得分:0)

由于子查询仅返回active = false的客户,因此无需从表中获取该列,您只需将其硬编码到SELECT列表中即可。

SELECT rental_id, last_update, false AS active
FROM rental
WHERE customer_id IN (
    SELECT customer_id
    FROM customer
    WHERE active = false)

如果没有FROMJOIN表之一,就无法从表中获取非常量数据。

顺便说一句,根据我的经验,MySQL在优化WHERE c in (SELECT ...)方面往往很差。我试图不惜一切代价避免它们,我认为你的老师在禁止它们时被误导了。