簡體   English   中英

如何使用聯合內部聯接查詢?

[英]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.

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