MySQL加入并在多个表中查找

时间:2013-01-27 21:02:40

标签: php mysql inner-join

我知道有很多关于这个问题的问题,但是我不能理解,因为它们似乎是对我没有很好理解的直接答案。

这就是我想要做的事情:

我有三个表:fuserstuserslusers。他们 都包含行:email

我想合并这三个表,并找出用户提交的变量$email是否已存在于email行中。

我知道使用内连接和可能联合都可以工作,但对于我的生活,我找不到一个体面的教程或我可以学习的例子。

任何?

3 个答案:

答案 0 :(得分:1)

SELECT some_primary_id as id, 'fusers' as table_name FROM fusers WHERE email = '$email' UNION 
SELECT some_other_primary_id as id, 'tusers' as table_name FROM tusers WHERE email = '$email' UNION
SELECT some_misc_primary_id as id, 'lusers' as table_name FROM lusers WHERE email = '$email'

注意我使用了fusers_id as id,因为union选择中的所有列都需要具有相同的名称

感谢@njk,您可以使用UNION ALL,因为UNION仅检查重复的行并将其删除,因此速度会更快。

<强>语法:

(SELECT a as COMMON_COLUMN_1, b as COMMON_COLUMN_2, c as COMMON_COLUMN3 FROM xxx WHERE ...)
UNION
(SELECT d as COMMON_COLUMN_1, e as COMMON_COLUMN_2, f as COMMON_COLUMN3 FROM yyy WHERE ...)
UNION
(SELECT g as COMMON_COLUMN_1, h as COMMON_COLUMN_2, i as COMMON_COLUMN3 FROM zzz WHERE ...)
# where a,b,c are columns from table xxx ONLY
# where d,e,f are columns from table yyy ONLY
# where g,h,j are columns from table zzz ONLY

简单UNION用于将多个SELECT语句的结果合并到一个结果集中。

答案 1 :(得分:0)

尝试这样的事情:

select if(count(*) > 0, 1, 0) as exists from fusers f, tusers t, lusers l where f.email = "$email" or t.email = "$email" or l.email = "$email";

答案 2 :(得分:0)

  

我有三张桌子:fusers,tusers,lusers。它们都包含行:电子邮件

     

我想合并这三个表,并查看用户提交的变量$ email是否已存在于电子邮件行中。

您有三个表描述具有公共字段的用户吗?然后答案(像往常一样)是规范化您的数据:所有常见数据应该在一个表中。