【问题标题】:MySQL Join and find in multiple tablesMySQL Join 并在多个表中查找
【发布时间】:2013-01-27 21:02:40
【问题描述】:

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

这就是我想做的:

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

我想把这三个表合并,看看email行中是否已经存在用户提交的变量$email

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

有人吗?

【问题讨论】:

    标签: php mysql inner-join


    【解决方案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
    

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

    【讨论】:

    • 你能用通俗的话解释一下这是做什么的吗?我想我明白了一些。 fusers_id 不应该是 fusers.id
    • 您确定要使用UNION 而不是UNION ALL
    • 编辑了我的答案。 @njk hmm 不需要,因为我正在将表名 'fusers' as table_name 添加到每一行
    • 其实有。 UNION ALL 更快。
    【解决方案2】:

    试试这样的:

    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";
    

    【讨论】:

    • 当电子邮件存在于其中一个表中时返回 1,当它不存在时返回 0。
    【解决方案3】:

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

    我想把这三个表结合起来,看看用户提交的变量$email是否已经存在于email行中。

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

    【讨论】:

    • 这意味着我要进行大规模的操作,因为这些表很大。简单地搜索以查找变量更容易。对我来说。
    • 不——这是一个微不足道的操作——你可以通过使用视图来保留现有代码的功能。
    猜你喜欢
    • 1970-01-01
    • 2012-03-15
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    相关资源
    最近更新 更多