【问题标题】:How to get all data from 2 tables using foreign key如何使用外键从 2 个表中获取所有数据
【发布时间】:2014-08-11 12:11:47
【问题描述】:

这是将一个表一分为二的结果:

Table users:
    user_id (pk, ai)
    email
    password
    last_login

Table data:
    user_id (fk to users.user_id)
    data_1
    data_2

只有一张表时选择一条记录:

SELECT users.email, users.password, data.data_1, data.data_2
FROM users,data 
WHERE users.email='$user_email' AND users.user_id=data.user_id";

如何从两个表中获取行由 users.user_id=data.user_id 连接的所有记录?

Row1: email, password, data_1, data2
Row2: email, password, data_1, data2
Row3: email, password, data_1, data2
Row4: email, password, data_1, data2
...

【问题讨论】:

  • SELECT users.email, users.password, data.data_1, data.data_2 FROM users JOIN data ON users.user_id=data.user_id
  • 这个问题已经被问过很多次了。这里有 1 个示例,仅来自快速谷歌搜索。 stackoverflow.com/questions/9853586/sql-join-multiple-tables
  • 这只会根据给定的电子邮件抓取一条记录。我正在寻找加入 2 个表并获取所有行的方法(但只有电子邮件、密码、data_1 和 data_2 列)。

标签: mysql sql


【解决方案1】:

要将 userData 表加入用户,请尝试以下操作:

SELECT u.user_id, u.email, u.password, u.last_login
FROM users u
JOIN userData ud ON (u.userID = ud.userID)

这将返回用户表中的用户 ID 与 userData 表中的用户 ID 匹配的所有数据。

编辑 此外,还有不同种类的连接:

  • 内部
  • 外层
  • 正确

有关此内容及其差异的更多信息,请查看此方便的参考: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

【讨论】:

    【解决方案2】:

    使用明确的join 语法可以帮助您。将您的查询重写为:

    SELECT 
        users.email, users.password, data.data_1, data.data_2
    FROM 
        users
    INNER JOIN 
        data 
    ON
        users.user_id=data.user_id
    WHERE 
        users.email='$user_email'
    

    并获取所有没有 WHERE 条件的行:

    SELECT 
        users.email, users.password, data.data_1, data.data_2
    FROM 
        users
    INNER JOIN 
        data 
    ON
        users.user_id=data.user_id
    

    它将关注点分开:连接表的条件与限制结果集的条件。

    【讨论】:

      【解决方案3】:
      SELECT users.email, users.password, data.data_1, data.data_2 FROM 
      users JOIN data ON  users.user_id=data.user_id
      WHERE users.email='$user_email';
      

      【讨论】:

        【解决方案4】:

        当两个表中有一个共同的字段匹配时,你必须使用内连接返回记录。 对于你的情况,前任

        select * from table1 
          inner join table2 on table1.user_id=table2.user_id
        

        将通过匹配公共字段返回两个表中的所有记录

        【讨论】:

          【解决方案5】:

          你试过了吗?

          SELECT users.email, users.password, data.data1, data.data2
          FROM users,data 
          WHERE users.user_id=data.user_id
          

          还是这个?

          SELECT users.email, users.password, data.data1, data.data2
          FROM users inner join data on users.user_id=data.user_id
          

          【讨论】:

            【解决方案6】:

            我们可以做到 如下...

            SELECT users.email, users.password, data.data_1, data.data_2
            FROM users,data 
            WHERE users.user_id=data.user_id AND users.email='$user_email'
            

            只需复制并过去上面的查询,您可能会得到预期的结果..

            【讨论】:

            • 它也是一个连接查询。它称为隐式连接,其中不使用 JOIN 关键字。
            猜你喜欢
            • 2018-07-08
            • 2020-07-28
            • 2019-10-14
            • 1970-01-01
            • 2019-09-01
            • 2018-12-08
            • 1970-01-01
            • 2015-04-11
            • 1970-01-01
            相关资源
            最近更新 更多