mysql从2个表中找到差异

时间:2011-09-08 16:12:35

标签: mysql

我需要了解我们的免费样本表中有多少人成为我们客户表中的客户。以下是我对2个表的看法:

SELECT free_samples.id, 
free_samples.first_name, 
free_samples.last_name, 
free_samples.address, 
free_samples.city, 
free_samples.state, 
free_samples.zip
FROM free_samples

然后是客户表

SELECT customers.id, 
customers.firstName, 
customers.lastName, 
customers.address, 
customers.city, 
customers.state, 
customers.zip
FROM customers

请注意,id不相同,因此很难匹配。所以,我需要知道有多少免费样本请求实际上成为了客户。有没有办法用查询来识别这个?

谢谢

3 个答案:

答案 0 :(得分:2)

您需要使用INNER JOIN来获取两个表格中匹配的结果(即free_samples中的人员并将其设为customers):

SELECT a.*
FROM customers a
    INNER JOIN free_samples b
        ON
            a.firstname=b.firstname
            AND a.city=b.city
            AND a.state=b.state
            AND a.zip=b.zip
            AND a.address=b.address
            AND a.lastname=b.lastname

注意:SELECT *被认为是不好的做法,我只是不确定您需要提取哪些数据。

答案 1 :(得分:2)

SELECT COUNT(*) FROM free_samples AS fs, customers AS c 
    WHERE fs.first_name = c.first_name
      AND fs.last_name = c.last_name
      AND fs.address = c.address
      AND fs.city = c.city
      AND fs.state = c.state
      AND fs.zip = c.zip;

查询非常简单,但我认为这不是实现目标的好方法。

只需在“客户”表格中添加新列“free_samples_id”即可保留“free_samples”表的ID。当免费用户注册为客户时,将id记录到'customers'表中。

答案 2 :(得分:1)

我从来没有学过LEFT JOIN和RIGHT JOIN之间的区别,但我认为使用它看起来很棒:P

编辑:刚看到我上方的评论,他是对的。这段代码实际上可以帮助那些尚未将免费样本转换为会员资格的客户。这与你想要的完全相反,但是我会把它留给别人可能在某个时候发现有用的机会:)

=================

基本上你想要像

这样的东西
    SELECT c.first_name, c.last_name, c.address, c.city, c.state, c.zip
      FROM customers c
 LEFT JOIN free_samples fs
        ON c.first_name = fs.first_name
       AND c.last_name = fs.last_name
       AND c.zip = fs.zip

您可能需要将LEFT JOIN更改为RIGHT JOIN,但我认为其中一个应该有效。别人会出现并解释它应该是哪一个,以及为什么,我确定:)

如果您想比较任何其他字段,只需将它们添加到JOIN的底部即可。重要的是要注意AND c.zip = fs.zip等不在WHERE子句中,它们是JOIN

的条件