当我创建一个系统的工作,我尝试使用下面的查询在我的项目:
SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
COUNT( posts.solved_post ) AS solved_post,
(SELECT users.username AS posted_by,
users.id AS posted_by_id
FROM users
WHERE users.id = posts.posted_by)
FROM topics
LEFT OUTER JOIN posts ON posts.topic_id = topics.id
WHERE topics.cat_id = :cat
GROUP BY topics.id
“:猫”是我的PHP代码绑定为我使用的PDO。 2是一个有效的价值“:猫”。
该查询虽然给我一个错误:“#1241 - 操作数应包含1列(S)”
我是什么树桩,我会觉得这个查询将工作没有问题。 选择列,然后从另一个表两种,并从那里继续上。 我只是想不通的问题是什么。
有一个简单的解决这一点,或另一种方式来写我的查询?
你的子查询中选择两列,当您使用它来预测一列(如外的部分SELECT
子句)。 您只能在这种情况下这样的查询中选择一列。
考虑加入到users
表代替; 这个选择你想要的东西列时会给你更多的灵活性users
。
SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
COUNT( posts.solved_post ) AS solved_post,
users.username AS posted_by,
users.id AS posted_by_id
FROM topics
LEFT OUTER JOIN posts ON posts.topic_id = topics.id
LEFT OUTER JOIN users ON users.id = posts.posted_by
WHERE topics.cat_id = :cat
GROUP BY topics.id
如果你不小心使用逗号,而不是也会出现此错误AND
对在ON
的条款JOIN
:
JOIN joined_table ON (joined_table.column = table.column, joined_table.column2 = table.column2)
^
should be AND, not a comma
COUNT( posts.solved_post ) AS solved_post,
(SELECT users.username AS posted_by,
users.id AS posted_by_id
FROM users
WHERE users.id = posts.posted_by)
嗯,你不能从这样的一个子查询获得多个列。 幸运的是,第二列已经posts.posted_by
! 所以:
SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
posts.posted_by
COUNT( posts.solved_post ) AS solved_post,
(SELECT users.username AS posted_by_username
FROM users
WHERE users.id = posts.posted_by)
...
如果你不小心使用,也会出现此错误=
代替IN
的在WHERE
子句:
例如:
WHERE product_id = (1,2,3);
这个错误可以发生的另一个地方是指派具有字符串之外的逗号的值。 例如:
SET totalvalue = (IFNULL(i.subtotal,0) + IFNULL(i.tax,0),0)