我需要了解我们的免费样本表中有多少人成为我们客户表中的客户。以下是我对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不相同,因此很难匹配。所以,我需要知道有多少免费样本请求实际上成为了客户。有没有办法用查询来识别这个?
谢谢
答案 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