Sql语句试图理解join语句

时间:2014-12-16 02:28:23

标签: sql join inner-join

我的代码粘贴在这里,用于Sql表和信息:http://pastebin.com/GsKp4z30

我要做的是: SuperClean希望为使用优惠券的客户提供特价。检索名称和 2014年9月1日至12月24日期间任何订单使用优惠券的客户地址, 2014。

但是我不断获得40多行信息,而且我似乎无法使用连接语句正常工作。

我正在尝试这个,但我一直收到无效的标识符。

SELECT
    CUSTOMER.CUSTOMER_NAME, CUSTOMER_CUSTOMER_NAME, CUSTOMER.CUSTOMER_ADDRESS
FROM CUSTOMER
INNER JOIN
    CUSTOMER ON CUSTOMER.CUSTOMER_ID = CUSTOMER_INVOICE.CUSTOMER_ID;

1 个答案:

答案 0 :(得分:1)

你有一个很好的第一次尝试。

您的第一个问题来自INNER JOIN CUSTOMER - 您已经从CUSTOMER中选择了,那么为什么要加入CUSTOMER?您应该加入CUSTOMER_INVOICE而不是:

SELECT
    CUSTOMER.CUSTOMER_NAME, CUSTOMER.CUSTOMER_ADDRESS
FROM CUSTOMER
INNER JOIN
    CUSTOMER_INVOICE ON CUSTOMER.CUSTOMER_ID = CUSTOMER_INVOICE.CUSTOMER_ID;

我还修正了SELECT的另一个问题,在此之前:

SELECT
    CUSTOMER.CUSTOMER_NAME, CUSTOMER_CUSTOMER_NAME, CUSTOMER.CUSTOMER_ADDRESS

然而,没有列或别名定义为CUSTOMER_CUSTOMER_NAME。所以它会给你一个无效的标识符错误。

这将返回所有客户的相应客户发票 - 现在我们需要使用YES将优惠券设置为WHERE将其过滤到发票:

SELECT
    CUSTOMER.CUSTOMER_NAME, CUSTOMER.CUSTOMER_ADDRESS
FROM CUSTOMER
INNER JOIN
    CUSTOMER_INVOICE ON CUSTOMER.CUSTOMER_ID = CUSTOMER_INVOICE.CUSTOMER_ID
WHERE
    CUSTOMER_INVOICE.COUPON_YESNO = 'YES';

现在进一步过滤结果集以使用您问题中的特定日期范围。除非你理解WHERE

,否则我会让你想出这一部分