2017-04-14 33 views
0

我有2个表,这是在一个共享的列customer_id相关显示从2代表不同列:如何用子查询

  • customer
  • rental

我需要显示rental_idlast_update来自rental表。 同样来自customeractive列,其中active是假

找遍了多个网站,以及一些问题在这里对堆栈溢出,这是我得到的最接近:

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

谢谢提前寻求帮助。

编辑:我必须使用子查询,因为这是一个学校项目,所以内部加入答案没有帮助。抱歉。

+1

如果'active'总是错误的,为什么你需要从桌子上取出它? – Barmar

回答

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 ...)时往往很差。我不惜一切代价尽力避免他们,我认为你的老师在禁止他们方面被误导了。

+0

这解决了它。谢谢。我将来会记住这种方法。 –

0

请尝试这样的查询。它使用INNER JOIN代替子查询

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; 
+0

不幸的是,我正在做一个学校作业,我不得不使用子查询。如果我使用内连接,则会丢失标记。不过谢谢。 –

+0

没有连接就不可能做到这一点。 – Barmar

+0

@Barmar - 谢谢,我已经改变了它 –