[英]Why am I getting a MySQL error?
這是我的查詢。 它的目的是允許訪問構成兩個動物匹配的animals
的屬性。
匹配表包含 animal1ID 和 animal2ID 的列,用於存儲構成匹配的動物。
SELECT id,
(SELECT *
FROM animals
WHERE animals.id=matches.animal1ID) AS animal1,
(SELECT *
FROM users
WHERE animals.id=matches.animalID) AS animal2
FROM matches WHERE id=5
但是,MySQl 返回此錯誤: Operand should contain 1 column(s)
。
為什么? 有沒有其他方法可以做到這一點,也許使用 JOIN 語句?
您不應在 SELECT 子句的子查詢中使用 *。 以這種方式重寫您的查詢:
SELECT m.id, a1.*, a2.*
FROM matches as m
LEFT JOIN animals as a1
on a1.id=m.animal1ID
LEFT JOIN users as a2
on a2.id=m.animalID
WHERE m.id=5
或者,只需將 * 替換為單個列名。 但是,在這種情況下,您必須確保您的子查詢總是只返回一行。
您也可以使用別名以這樣的方式分隔字段:
SELECT m.id, a1.name as an1_name, a2.name as a2_name, a1.some_field as blabla ...
您可以在 PHP 之前比較查詢結果,只需在 WHERE 子句中添加如下內容:
...
WHERE m.id=5
AND a1.name <> a2.name -- or what you want
更像這樣的東西怎么樣:
SELECT id,
animals.*,
users.*
FROM matches
JOIN animals
ON animals.id=matches.animal1ID
JOIN users
ON users.id=matches.animalID
WHERE id=5
如果不能保證animals
或users
,您可以使用LEFT JOIN
SELECT id,
animals.*,
users.*
FROM matches
LEFT JOIN animals
ON animals.id=matches.animal1ID
LEFT JOIN users
ON users.id=matches.animalID
WHERE id=5
使用這些 JOINS,您可以從animals
和users
中選擇您需要的任何列
SELECT id,
animals.animalName AS AnimalName,
users.animalName AS UserAnimalName
FROM matches
(LEFT) JOIN animals
ON animals.id=matches.animal1ID
(LEFT) JOIN users
ON users.id=matches.animalID
WHERE id=5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.