Saat mengerjakan sistem yang saya buat, saya mencoba menggunakan kueri berikut dalam proyek saya:
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" terikat oleh kode PHP saya karena saya menggunakan PDO. 2 adalah nilai yang valid untuk ": cat".
Kueri itu memberi saya kesalahan: "# 1241 - Operand harus berisi 1 kolom"
Apa yang membuat saya bingung adalah saya akan berpikir bahwa kueri ini tidak akan berhasil. Memilih kolom, lalu memilih dua lagi dari tabel lain, dan melanjutkan dari sana. Saya hanya tidak tahu apa masalahnya.
Apakah ada perbaikan sederhana untuk ini, atau cara lain untuk menulis kueri saya?
sumber
COUNT()
itu membuang sedikit; kueri yang saya berikan mungkin akan memberikan kesalahan karena agregasi. Anda mungkin perlu memindahkan agregasi tersebut ke subkueri, bergantung pada tujuan kueri Anda (yang saat ini tidak jelas bagi saya).Kesalahan ini juga dapat terjadi jika Anda tidak sengaja menggunakan koma, bukan
AND
diON
klausa aJOIN
:sumber
Kesalahan ini juga dapat terjadi jika Anda tidak sengaja menggunakan,
=
bukanIN
diWHERE
klausa:SEBAGAI CONTOH:
sumber
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)
Nah, Anda tidak bisa mendapatkan banyak kolom dari satu subkueri seperti itu. Untungnya, kolom kedua sudah
posts.posted_by
! Begitu: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) ...
sumber
Dalam kasus saya, masalahnya adalah saya mengelilinginya pemilihan kolom saya dengan tanda kurung karena kesalahan:
SELECT (p.column1, p.colum2, p.column3) FROM table1 p where id = 1;
Dan harus:
SELECT p.column1, p.colum2, p.column3 FROM table1 p where id = 1;
Kedengarannya konyol, tetapi itu menyebabkan kesalahan ini dan butuh beberapa waktu untuk mengetahuinya.
sumber
Tempat lain kesalahan ini dapat terjadi adalah menetapkan nilai yang memiliki koma di luar string. Sebagai contoh:
SET totalvalue = (IFNULL(i.subtotal,0) + IFNULL(i.tax,0),0)
sumber
Kesalahan ini juga dapat terjadi jika Anda tidak sengaja melewatkannya
if
nama fungsi.sebagai contoh:
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);
Punya masalah ini ketika saya melewatkan menempatkan if dalam
if
fungsinya!sumber
(SELECT users.username AS posted_by, users.id AS posted_by_id FROM users WHERE users.id = posts.posted_by)
Di sini Anda menggunakan sub-kueri tetapi sub-kueri ini harus mengembalikan hanya satu kolom. Pisahkan jika tidak maka akan muncul kesalahan.
sumber
Saya mendapat kesalahan ini saat menjalankan skrip MySQL di konsol Intellij, karena menambahkan tanda kurung di tempat yang salah:
SALAH:
SELECT user.id FROM user WHERE id IN (:ids); # Do not put brackets around list argument
BAIK:
SELECT user.id FROM user WHERE id IN :ids; # No brackets is correct
sumber