1

我对 mysql 5.6 版本有问题。对不起,如果我的英语很烂,如果格式不正确,我很抱歉,我很着急。

Mysql 从这个查询中抛出这个错误“#1241 - 操作数应该包含 1 列”:

SELECT DISTINCT (P.`P_nombre`, P.`P_raza`)

FROM    `Perros` AS P,
        `Adiestramientos` as A

WHERE   P.`P_codigo` = A.`P_codigo` AND A.`A_nroLegajo` = '1500'
AND P.`P_codigo` NOT IN(
        SELECT  A.`P_codigo`
        FROM    `Adiestramientos` as A
        WHERE A.`A_nroLegajo`= '4600'
        )

它似乎在 Mysql 5.0 上工作正常,问题似乎出在 IN 运算符上

希望您能够帮助我。

谢谢!

4

3 回答 3

1

你得到的错误意味着: -

MySQL 不支持以下形式的语句:

SELECT * FROM t1 WHERE s1 IN (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1)

在您的情况下,您必须更改标识符 A,因为它使用了两次。

尝试这个:-

SELECT DISTINCT P.`P_nombre`, P.`P_raza`
FROM    `Perros` AS P,
        `Adiestramientos` as A
WHERE   P.`P_codigo` = A.`P_codigo` AND A.`A_nroLegajo` = '1500'
AND P.`P_codigo` NOT IN(
        SELECT  A1.`P_codigo`
        FROM    `Adiestramientos` as A1
        WHERE A1.`A_nroLegajo`= '4600'
        )
于 2013-09-19T18:21:26.680 回答
1

A对同一个表使用了两次标识符 - 在内部和外部查询中。将一个更改为不同的,例如A2

SELECT DISTINCT P.`P_nombre`, P.`P_raza`
FROM    `Perros` AS P,
        `Adiestramientos` as A
WHERE   P.`P_codigo` = A.`P_codigo` AND A.`A_nroLegajo` = '1500'
AND P.`P_codigo` NOT IN(
        SELECT  A2.`P_codigo`
        FROM    `Adiestramientos` as A2
        WHERE A2.`A_nroLegajo`= '4600'
        )
于 2013-09-19T18:19:57.210 回答
1

在您的选择列表中删除括号:

SELECT  DISTINCT
        P.`P_nombre`, P.`P_raza`
FROM    `Perros` AS P,
        `Adiestramientos` as A
WHERE   P.`P_codigo` = A.`P_codigo`
        AND A.`A_nroLegajo` = '1500'
        AND P.`P_codigo` NOT IN
        (
        SELECT  A2.`P_codigo`
        FROM    `Adiestramientos` as A2
        WHERE   A2.`A_nroLegajo`= '4600'
        )

MySQL 不允许选择元组作为一个字段,并且无论如何DISTINCT都适用于整个SELECT列表。

于 2013-09-19T18:24:23.377 回答