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