如何使用外键从2个表中获取所有数据

lr1*_*100 3 mysql sql

这是将单个表分成两部分的结果:

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

Table data:
    user_id (fk to users.user_id)
    data_1
    data_2
Run Code Online (Sandbox Code Playgroud)

在只有一个表时选择单个记录:

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";
Run Code Online (Sandbox Code Playgroud)

如何从两个表中获取所有由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
...
Run Code Online (Sandbox Code Playgroud)

VMa*_*Mai 18

使用显式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'
Run Code Online (Sandbox Code Playgroud)

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

SELECT 
    users.email, users.password, data.data_1, data.data_2
FROM 
    users
INNER JOIN 
    data 
ON
    users.user_id=data.user_id
Run Code Online (Sandbox Code Playgroud)

它分离了关注点:连接表的条件以及限制结果集的条件.


flo*_*dea 5

你试过这个吗?

SELECT users.email, users.password, data.data1, data.data2
FROM users,data 
WHERE users.user_id=data.user_id
Run Code Online (Sandbox Code Playgroud)

或这个?

SELECT users.email, users.password, data.data1, data.data2
FROM users inner join data on users.user_id=data.user_id
Run Code Online (Sandbox Code Playgroud)