Tijdens het werken aan een systeem dat ik ben het creëren, probeerde ik de volgende query gebruiken in mijn project:
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
“: cat” is gebonden aan mijn PHP code want ik ben met behulp van PDO. 2 is een geldige waarde voor “: cat”.
Dat vraag al geeft me een fout: “# 1241 – Operand moet 1 kolom (s) bevatten”
Wat stompen mij is dat ik zou denken dat deze vraag geen probleem zou werken. Het selecteren van kolommen, dan is het selecteren van twee meer uit een andere tafel, en verder op vanaf daar. Ik kan het gewoon niet achterhalen wat het probleem is.
Is er een eenvoudige oplossing voor dit, of een andere manier om mijn vraag te schrijven?
Antwoord 1, Autoriteit 100%
Uw subzoekopdracht is het selecteren van twee kolommen, terwijl u het aan één kolom te projecteren (als onderdeel van de buitenste SELECT
clausule). U kunt slechts één kolom uit een dergelijke vraag in deze context.
Je kunt ook lid van de users
tafel in plaats; dit zal u meer flexibiliteit te geven bij de keuze van welke kolommen je wilt van 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
Antwoord 2, autoriteit 15%
Deze fout kan ook optreden als u per ongeluk komma’s gebruikt in plaats van AND
in de ON
-clausule van een JOIN
:
JOIN joined_table ON (joined_table.column = table.column, joined_table.column2 = table.column2)
^
should be AND, not a comma
Antwoord 3, autoriteit 9%
Deze fout kan ook optreden als u per ongeluk =
gebruikt in plaats van IN
in de WHERE
-clausule:
VOOR VOORBEELD:
WHERE product_id = (1,2,3);
Antwoord 4, autoriteit 5%
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)
Nou, je kunt niet meerdere kolommen op die manier uit één subquery halen. Gelukkig is de tweede kolom al posts.posted_by
! Dus:
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)
...
Antwoord 5, autoriteit 4%
In mijn geval was het probleem dat ik per ongeluk mijn kolomselectie tussen haakjes zette:
SELECT (p.column1, p.colum2, p.column3) FROM table1 p where p.column1 = 1;
En moet zijn:
SELECT p.column1, p.colum2, p.column3 FROM table1 p where p.column1 = 1;
Klinkt gek, maar het veroorzaakte deze fout en het kostte wat tijd om erachter te komen.
Antwoord 6
Deze fout kan ook optreden als u per ongeluk de functienaam if
mist.
bijvoorbeeld:
set v_filter_value = 100;
select
f_id,
f_sale_value
from
t_seller
where
f_id = 5
and (v_filter_value <> 0, f_sale_value = v_filter_value, true);
Ik kreeg dit probleem toen ik ifniet in de functie if
had gezet!
Antwoord 7
Ik kreeg deze fout tijdens het uitvoeren van een MySQL-script in een Intellij-console, vanwege het toevoegen van haakjes op de verkeerde plaats:
VERKEERD:
SELECT user.id
FROM user
WHERE id IN (:ids); # Do not put brackets around list argument
RECHTS:
SELECT user.id
FROM user
WHERE id IN :ids; # No brackets is correct
Antwoord 8
Een andere plaats waar deze fout kan optreden, is het toewijzen van een waarde met een komma buiten een tekenreeks. Bijvoorbeeld:
SET totalvalue = (IFNULL(i.subtotal,0) + IFNULL(i.tax,0),0)
Antwoord 9
(SELECT users.username AS posted_by,
users.id AS posted_by_id
FROM users
WHERE users.id = posts.posted_by)
Hier gebruikt u subquery, maar deze subquery moet slechts één kolom retourneren.
Scheid het, anders wordt er een fout weergegeven.