-1

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

这就是我想要做的:

我有三个表:fusers, tusers, lusers。它们都包含以下行:email

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

我知道使用内部连接和可能的联合都可以,但是对于我的生活,我找不到一个像样的教程或示例可以从中学习。

任何人?

4

3 回答 3

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了,因为联合选择中的所有列都需要具有相同的名称

感谢@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

SimplyUNION用于将多个 SELECT 语句的结果组合成一个结果集。

于 2013-01-27T21:04:08.393 回答
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";
于 2013-01-27T21:07:32.417 回答
0

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

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

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

于 2013-01-27T21:24:11.377 回答