如何从一个字段中不同的两个表中选择行?

时间:2011-07-12 20:00:41

标签: mysql database

很抱歉入门级数据库问题,但我真的想了解这一点。

我有两个表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的第一行?

专家可以提供一些帮助吗?谢谢!

2 个答案:

答案 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