2

join

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

users

|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
4

1 に答える 1

2

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

また、テーブル名はMySQLで予約されているキーワードであるためjoin、エスケープする必要があります。userこれらの名前をオブジェクト名として使用しないようにしてください。

SQLフィドルデモ

これはあなたに与えるでしょう:

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

更新されたSQLフィドルデモ

于 2013-01-15T11:20:28.983 に答える