簡體   English   中英

為什么我會收到 MySQL 錯誤?

[英]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

如果不能保證animalsusers ,您可以使用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,您可以從animalsusers中選擇您需要的任何列

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM