为连接表MySQL

时间:2016-03-14 01:16:10

标签: mysql

是否可以为MySQL中的联接表提供别名? 例如

Select *
From Customers
Natural Join Transaction as CT
Where (Select Count(CT.Customer_ID) ) >= 2

CT会引用连接表还是Transaction表? 如果它引用了Transaction表,我如何在子查询中引用连接表?

2 个答案:

答案 0 :(得分:4)

不,你不能在MySQL中这样做。在其他数据库中,您可以使用CTE来实现此目的。 (在任何数据库中,您都可以使用临时表,但这不是一个好的解决方案。)

注意:请勿使用natural join。这是一个等待发生的错误。

要表达您的查询,请使用ONUSING子句。对于您的查询,它将是这样的:

Select c.*, ct.*
From Customers c Join
     Transaction as CT
     ON c.Customer_ID = CT.Customer_ID JOIN
     (select t2.Customer_ID, count(*) as cnt
      from Transaction t
      group by t2.CustomerId
      where cnt >= 2
     )  cct
     ON cct.Customer_ID = cct.Customer_Id;

答案 1 :(得分:1)

根据您的评论:

  

抓住所有有2笔或更多交易的客户

这是使用exists的一个选项:

select *
from customers c
where exists (
    select 1 
    from transaction t 
    where c.customerid = t.customerid 
    having count(*) > 1
)