很抱歉入门级数据库问题,但我真的想了解这一点。
我有两个表customer_change和customer_full,我想从customer_full中选择同一个客户(相同的customer_id)但具有不同customer_points的行。
我写了以下查询:
SELECT *
FROM customer_change a,customer_full b
WHERE
a.ID = b.ID AND
a.CUSTOMER_POINTS != b.CUSTOMER_POINTS
现在它有效。但它会返回两个表中的行,如何更改查询只返回第二个表中的行?
此外,返回的行可能包含两行具有相同ID的行,是否可以将查询修改为仅包含具有此ID的第一行?
专家可以提供一些帮助吗?谢谢!
答案 0 :(得分:5)
SQL不等式运算符是<>
,而不是!=
。 (道歉:我注意到至少在某些实现中支持!=
!正如对问题的评论所指出的那样,它似乎是一个字符集问题。我支持其余的答案,虽然。:))
尽管如此,我建议使用learning about JOIN syntax,而不是使用WHERE标准连接表。前者适用于更易读的查询,让您可以更好地控制表的连接方式。
例如,您的上述查询将是:
SELECT *
FROM customer_change a
JOIN customer_full b ON a.ID = b.ID AND a.CUSTOMER_POINTS <> b.CUSTOMER_POINTS
答案 1 :(得分:3)
*
将选择查询中所有表的叉积产生的所有内容。您可以通过在SELECT
子句中指定其名称来“选择”特定列,例如:
SELECT customer_points
FROM customer_change
或者,您可以通过将表名添加到列名称的开头,后跟句点,来仅选择特定表(或多个表)中的列。如:
SELECT customer_change.customer_points, customer_full.ID
FROM customer_change, customer_full
在您的情况下,您只能选择第二个表中的记录:
SELECT b.*
FROM customer_change a,customer_full b
WHERE
a.ID = b.ID AND
a.CUSTOMER_POINTS != b.CUSTOMER_POINTS
<>
和!=
都可以接受“不等于”operators。
如果你想使用JOIN
,那么你可以这样做:
SELECT b.*
FROM customer_change a
JOIN customer_full b ON a.ID = b.ID AND a.CUSTOMER_POINTS != b.CUSTOMER_POINTS