我知道有很多关于这个问题的问题,但是我不能理解,因为它们似乎是对我没有很好理解的直接答案。
这就是我想要做的事情:
我有三个表:fusers
,tusers
,lusers
。他们
都包含行:email
我想合并这三个表,并找出用户提交的变量$email
是否已存在于email
行中。
我知道使用内连接和可能联合都可以工作,但对于我的生活,我找不到一个体面的教程或我可以学习的例子。
任何?
答案 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是否已存在于电子邮件行中。
您有三个表描述具有公共字段的用户吗?然后答案(像往常一样)是规范化您的数据:所有常见数据应该在一个表中。