MySQL:根据用户输入从多个表中提取和显示信息

时间:2015-01-24 18:42:59

标签: mysql database

在SQL编程方面,我有点超出了我的深度,但在搜索我的问题的解决方案后,我找不到任何相关的答案,因此我的问题在这里:

使用MySQL,我有一个名为newsletter_subscriber的表。此表仅包含电子邮件地址列表(subscriber_email),每行电子邮件地址具有唯一ID(subscriber_ID),每行的ID增加1。

我想要完成的是能够输入“from”ID和“to”ID(例如从672到835),并且对于每个ID都要查询sales_flat_order_address和sales_flat_order_address表。相应的电子邮件地址,以返回客户的名字(名字)和姓氏(姓氏)以及电话号码(电话)。

三个表(newsletter_subscriber,表sales_flat_order_address和sales_flat_order_address)的唯一共同点是电子邮件地址。如果在sales_flat_order_address和sales_flat_order_address中找到匹配项,则应放弃进一步搜索此电子邮件地址,因此我们最终不会为同一电子邮件地址提供多个结果(两个表可能包含相同的电子邮件地址,并且每个表甚至可能包含电子邮件地址多次,在所有情况下都会出现名字,姓氏和电话的完整信息。

最终结果应如下所示(我的评论如下):

1:  2:                      3:          4:          5:
672 email1@example.com      Firstname1  Lastname1   Telephone1
673 email2@example.com      Firstname2  Lastname2   Telephone2
674 email3@example.com      Firstname3  Lastname3   Telephone3
675 email4@example.com      Firstname4  Lastname4   Telephone4
676 email5@example.com      Firstname5  Lastname5   Telephone5
..  ..                      ..  ..  ..
835 email174@example.com    Firstname6  Lastname6   Telephone6

* 1:第1列,显示来自表newsletter_subscriber的手动输入subscriber_id列的递增ID

* 2:第2列,显示来自表newsletter_subscriber的相应字段subscriber_email

* 3:第3列,显示表sales_flat_order_address或sales_flat_order_address中的相应字段名字,以对应第2列中的相应电子邮件地址

* 4:第4列,显示表sales_flat_order_address或sales_flat_order_address中的相应字段姓氏,以对应第2列中的相应电子邮件地址

* 5:第5列,显示表sales_flat_order_address或sales_flat_order_address中的相应字段电话,以与第2列中的相应电子邮件地址相对应

是否有人可以提供代码示例?

2 个答案:

答案 0 :(得分:0)

您可以尝试:

select ns.email, a.firstname, a.lastname, a.telephone from sales_flat_order_address a inner join newsletter_subscriber ns on
a.subscriber_ID = ns.ID

这应该可以,因为您的表具有以下字段: sales_flat_order_address:电子邮件,名字,姓氏,电话,subscriber_ID newsletter_subscriber:身份证,电子邮件

答案 1 :(得分:0)

试试这个会起作用:

SELECT t1.`subscriber_email`, t2.`firstname`, t2.`lastname`, t2.`telephone` from `newsletter_subscriber` t1 JOIN `sales_flat_order_address` t2 on
t1.`subscriber_email` = t2.`email`