[英]How to use Union Inner Join Query?
我有一個由前雇員創建的查詢,並且工作正常。 但是,我需要向其中添加一個名為“ info”的表,並且很難使用它。 “信息”表具有一個用戶列,該用戶列應與用戶表中的user_id列匹配。
信息表中包含諸如用戶(即用戶ID),公司,電話,全名之類的列。 該查詢當前通過電子郵件將a發送給已注冊特定投標的用戶。 然后創建一個日志文件,在該日志文件中,我需要顯示信息表中的信息,例如公司,電話和全名。
我試過在第一個INNER JOIN之后添加它,如下所示:
INNER JOIN info
ON info.user = users.user_id
該查詢將運行,但是當我嘗試顯示該查詢時,它將不會從信息表中獲取任何信息。
以下是有效的查詢:
$sql = '
SELECT users.user_id
, users.username
FROM users
INNER
JOIN registrations
ON registrations.user = users.user_id
AND registrations.tender = '.mysql_real_escape_string($tender).'
UNION
SELECT users.user_id
, users.username
FROM users
INNER
JOIN user_divisions
ON user_divisions.user = users.user_id
INNER
JOIN tender_divisions
ON tender_divisions.division = user_divisions.division
AND tender_divisions.tender = '.mysql_real_escape_string($tender).'
WHERE
users.verified = 1
GROUP
BY users.user_id
';
格式相同
確保所有用戶都存在於用戶表中以顯示所有信息數據
SELECT users.user_id
,users.username
來自信息
內
加入用戶
開啟info.user = users.user_Id
根據您的輸入,這應該可以工作(我已格式化SQL以使其符合我的風格)
SELECT users.user_id, users.username, info.*
FROM users
INNER JOIN registrations ON registrations.user = users.user_id
AND registrations.tender = '.mysql_real_escape_string($tender).'
INNER JOIN info ON info.user = users.user_id
UNION
SELECT users.user_id , users.username, info.*
FROM users
INNER JOIN user_divisions ON user_divisions.user = users.user_id
INNER JOIN tender_divisions ON tender_divisions.division = user_divisions.division
AND tender_divisions.tender = '.mysql_real_escape_string($tender).'
INNER JOIN info ON info.user = users.user_id
WHERE users.verified = 1
GROUP BY users.user_id
如果初始查詢運行正常,則沒有理由不起作用。
如果它不返回任何記錄,則意味着您的用戶表和信息表之間沒有匹配項。 您可以將INNER JOIN
更改為LEFT JOIN
進行驗證。
備注:
我不喜歡上一個查詢中的GROUP BY
。 它適用於MySQL,但這不是ANSI標准,如果在激活ONLY_FULL_GROUP_BY模式的情況下移動到另一個數據庫,則可能會遇到問題
SELECT
中的列應與GROUP BY
中的列相同。 如果目的是刪除重復項(看起來像您未在SELECT
使用聚合函數),則應改用DISTINCT
值得一讀: MySQL BY GROUP BY
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.