如何使用Union Inner Join Query?

时间:2017-03-11 17:03:52

标签: php mysql

我有一个先前员工创建并且工作正常的查询。但是,我需要在其中添加一个名为' info'并且我很难接受它。 '信息' table的用户列应与users表中的user_id列匹配。

信息表包含用户(用户ID),公司,电话,全名等列。该查询当前通过电子邮件发送给注册到特定投标的用户。然后创建一个日志文件,在该日志文件中,我需要显示信息表中的信息,如公司,电话和全名。

我尝试在第一次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
        ';

2 个答案:

答案 0 :(得分:0)

没有相同的格式
确保用户表中存在所有用户以显示所有信息数据
SELECT users.user_id
             ,users.username
          来自信息
        INNER
          加入用户
            ON info.user = users.user_I'd

答案 1 :(得分:0)

根据您的输入,这应该有用(我已经格式化了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 Handling of GROUP BY