簡體   English   中英

MySQL INNER JOIN 3個不同的表與WHERE

[英]MySQL INNER JOIN 3 different tables with WHERE

很抱歉,如果這個問題看起來很奇怪,但是我試圖在SQL中INNER JOIN一些表,但我做對了。 我對此並不陌生,所以如果您願意解釋我在做什么錯的話,我將不勝感激。

基本上,我想做的是加入下表:會議,用戶和服務。 用戶可以是主持人或管理員,並且該信息在“設置”列中定義。 我想與users.id WHERE users.settings ='moderator'一起INNER JOIN moderator_id,也要與users.id WHERE users.settings ='admin'一起INNER JOIN admin_id。

希望你們能理解我正在嘗試做的事情:)

謝謝!

SELECT meetings.*
     , users.id
     , users.name
     , users.settings
     , services.id
     , services.service_name
     , services.price 
  FROM meetings 
  JOIN users 
    ON meetings.moderator_id = users.id 
 WHERE users.settings = 'moderator' 
  JOIN users 
    ON meetings.admin_id = users.id 
 WHERE users.settings = 'admin' 
  JOIN services 
    ON meetings.service_id = services.id 
 ORDER 
    BY meetings.date ASC   
SELECT meetings.*, users.id, users.name, users.settings, services.id, services.service_name, services.price 
FROM meetings

INNER JOIN users as mods ON meetings.moderator_id = mods.id 
INNER JOIN users as adms ON meetings.admin_id = adms.id
INNER JOIN services ON meetings.service_id = services.id

WHERE adms.users.settings = 'admin' AND mods.users.settings = 'moderator' 
ORDER BY appointments.date ASC

我想您需要為管理員和主持人指定用戶實例,然后將其放置在加入位置之后。 嘗試此查詢,並告訴我它是否有效。

SELECT的語法為:

SELECT <fields>
FROM <table>
JOIN <table> ON <condition>
JOIN <table> ON <condition>
...
WHERE <condition> AND <condition> AND ...
ORDER BY <column>, <column>, ...

即,您列出了所有涉及的表以及條件。 這是SQL查詢的一般結構,因此請隨時記住:)。 還請注意,這當然是在極端情況下簡化的,還有更多的事情要做。 (例如,在WHERE子句中使用OR代替AND,但這是另一個故事。)祝您好運。

編輯:如果您為一個表加上別名,例如“ FROM tablename AS newtablename”,則應為WHERE中的條件,SELECT中的列等使用別名,newtablename。否則,您會收到有關找不到的消息。 您可以在查詢期間對表進行重命名,然后丟棄舊名稱。

例如:

SELECT m.*
     , mods.name mod_name
     , admins.name admin_name
     , s.service_name
     , s.price 
  FROM meetings m
  JOIN users mods
    ON mods.id = m.moderator_id 
  JOIN users admins
    ON admins.id = m.admin_id
  JOIN services s
    ON s.id = m.service_id 
 WHERE mods.settings = 'moderator' 
   AND admins.settings = 'admin';

...或更可能是...

SELECT m.*
     , mods.name mod_name
     , admins.name admin_name
     , s.service_name
     , s.price 
  FROM meetings m
  LEFT
  JOIN users mods
    ON mods.id = m.moderator_id 
   AND mods.settings = 'moderator' 
  LEFT
  JOIN users admins
    ON admins.id = m.admin_id
   AND admins.settings = 'admin'
  JOIN services s
    ON s.id = m.service_id;

我通過結合您的一些建議找到了答案! 現在看來一切正常,所以謝謝你們的幫助!

SELECT meetings.*, 
  mods.id, 
  mods.name as mods_name, 
  mods.settings, 
  admins.id, 
  admins.name as admins_name, 
  admins.settings, 
  services.id, 
  services.service_name, 
  services.price

FROM meetings 

INNER JOIN users as mods ON meetings.moderator_id = mods.id 
INNER JOIN users as admins ON meetings.admin_id = admins.id
INNER JOIN services ON meetings.service_id = services.id

WHERE mods.settings = 'moderator' AND admins.settings = 'admin' 
ORDER BY meetings.date ASC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM