SQL子查询问题

时间:2014-09-23 15:35:59

标签: sql subquery

我正在尝试创建一个子查询(不是连接),我将从一个表中列出两个列,并在另一个表中列出限制。

我正在尝试从发票表中列出超过$ 50的所有发票的客户表中的CustomerName和CustomerPhone。

    SELECT CustomerName CustomerPhone
    FROM CUSTOMER, INVOICE
    WHERE TotalAmount IN
    (SELECT TotalAmount
    FROM INVOICE
    WHERE TotalAmount > 50);

如何修复子查询?它显示所有客户名称。

2 个答案:

答案 0 :(得分:1)

只需从from子句中删除无关的笛卡尔积,并为IN使用适当的列:

SELECT c.CustomerName c.CustomerPhone
FROM CUSTOMER c
WHERE c.CustomerId IN (SELECT i.CustomerId
                       FROM INVOICE i
                       WHERE i.TotalAmount > 50
                      );

你没有给出正确的列名称的指导,所以我猜。

一些建议:

  • 请勿在{{1​​}}子句中使用逗号。始终使用明确的from语法。
  • 使用表名称缩写的表别名。
  • 对所有列引用进行质量检查,以便了解它们的来源

答案 1 :(得分:0)

SELECT 
    CustomerName,
    CustomerPhone
FROM CUSTOMER c 
INNER JOIN INVOICE i ON
    c.CustomerId = i.CustomerId AND
    i.TotalAmount > 50
GROUP BY
    CustomerName,
    CustomerPhone