mysql 将具有 2 个 fk 的表连接到同一个表

标签 mysql sql select join left-join

连接:

|ID|admin|user |data|
|1 |00001|00002|XXXX|
  • admin(fk) = users.id,
  • 用户(fk) = users.id

用户:

|id   |name|pass|type |
|00001|root|1234|admin|
|00002|user|1235|user |

select join.*,users.name as admin,users.name as user from join 
left join users on users.id=join.admin
left join users on users.id=join.user

where grrrrrrr

我该怎么做?

原始查询,我正在尝试运行:

SELECT

    visits.id,
    visits.patient AS patient_id,
    visits.doctor AS doctor_id,
    visits.date,
    visits.time_booked,
    visits.time_arrived,
    visits.time_start,
    visits.time_end,
    visits.type_id,
    visits.complain,
    visits.diagnosis,
    visits.note,
    visits.stats,
    (personal.name WHERE personal.id=visits.patient and personal.role='patient') AS pt_name,
    (personal.name WHERE personal.id=visits.doctor and personal.role='doctor') AS dr_name
    FROM
    visits ,
    personal

最佳答案

您必须使用不同的别名为表users 指定别名。类似的东西

select 
  a.*,
  u1.name as admin,
  u2.name as user 
from `join` a 
left join users u1 on u1.id = a.admin
left join users u2 on u2.id = a.`user`;

此外,您还必须对表名 joinuser 进行转义,因为它们是 MySQL 中的保留关键字。尽量避免将这些名称作为对象名称。

SQL Fiddle Demo

这会给你:

| ID | ADMIN | USER | DATA |
----------------------------
|  1 |     1 |    2 | XXXX |

更新

对于更新问题后的查询,您必须以相同的方式执行此操作,如下所示:

SELECT
  v.id,
  v.patient AS patient_id,
  v.doctor AS doctor_id,
  v.date,
  v.time_booked,
  v.time_arrived,
  v.time_start,
  v.time_end,
  v.type_id,
  v.complain,
  v.diagnosis,
  v.note,
  v.stats,
  pationts.name AS pt_name,
  doctors.name AS dr_name
FROM visits v
LEFT JOIN personal pationts  ON pationts.id   = v.patient 
                            AND pationts.role ='patient'
LEFT JOIN personal doctors   ON doctors.id    = v.patient 
                            AND doctors.role  ='doctor';

Updated SQL Fiddle Demo

关于mysql 将具有 2 个 fk 的表连接到同一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14336596/

相关文章:

MySQL - 选择具有值的列并创建 'virtual column'

php - 使用删除按钮从数据库中删除记录

SQL 更新行号

php - Laravel Eloquent 联合查询

Mysql select查询字符串操作

Mysql Running Balance by group 来自不同的表

mysql - 选择前触发

php - 更新并从数据库表中选择

mysql - UTF-8 与 Latin1 mysql,未在 utf-8 上使用的索引

c# - 如何从 MySQL 中选择 sum(max remain(x+y+z)) 来捕获 sum(1200+1300+1400)