【问题标题】:MySQL: joins, The used SELECT statements have a different number of columnsMySQL:连接,使用的 SELECT 语句有不同的列数
【发布时间】:2014-06-05 08:45:29
【问题描述】:

我知道还有更多关于此的问题,但我找不到适合我的正确答案。

这是我的查询:

$query = $mysql->query("(
                        SELECT questions.*, tags.tagData
                        FROM questions
                        LEFT JOIN tags
                        ON questions.id = tags.questId
                        )
                        UNION (
                        SELECT users.username
                        FROM users
                        LEFT JOIN questions
                        ON users.id = questions.ownerId
                        )
                    ");

我选择了表问题中的所有问题,也选择了标签,但我将 ownerId 保存为所有者的 id,并且我希望显示用户名。现在我得到这个错误:

使用的 SELECT 语句的列数不同

我做错了什么?

【问题讨论】:

  • 寻找join 而不是union?预期的输出是什么?
  • 我认为你想加入数据...如果你想合并数据,那么你必须在每个查询中拥有相同数量的列来合并
  • @RagingBull 我在 Google 上看到了
  • I saw it on Google?对不起,你是什么意思?
  • 我在 Google 上搜索“mysql joins 2 tables”,然后我看到了 union。

标签: mysql join union


【解决方案1】:

为什么你需要做 UNION ?问题表已链接到用户,您可以在 JOIN 中使用它

SELECT questions.*, 
tags.tagData,
users.username
FROM questions
LEFT JOIN tags
ON  tags.questId = questions.id 
LEFT JOIN
users ON users.id = questions.ownerId

【讨论】:

  • 这行不通,但是当我更改为 SELECT 时; SELECT questions.*, users.username, tags.tagData 它有效!
  • 好的,但是根据您的选择和我给出的内容,我看到的区别是用户名列在显示中的位置。此外,最好只选择必填字段而不是 *
  • 是的,但我需要问题的每个字段。
【解决方案2】:
 `SELECT questions.*, tags.tagData
            FROM questions
            LEFT JOIN tags
            ON questions.id = tags.questId
            )
            UNION (
            SELECT users.username,questions.*
            FROM users
            LEFT JOIN questions
            ON users.id = questions.ownerId
            )`

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 2011-09-18
    • 2020-08-02
    相关资源
    最近更新 更多