【问题标题】:#1241: Operand should contain 1 column(s) [duplicate]#1241:操作数应包含 1 列 [重复]
【发布时间】:2018-11-13 13:19:39
【问题描述】:

我收到错误代码“#1241:操作数应包含 1 列”。 该代码工作过一次,但我没有改变它。但现在它不再起作用了。

有什么问题?这与 IN 运算符有关。

代码如下:

SELECT DISTINCT 
    composition.compartikelnr, 
    composition.artikelnr,
    aantal 
FROM 
    webshops.composition 
WHERE 
    composition.compartikelnr IN (
        SELECT 
            producten.artikelnr, 
            producten.merk, 
            producten.producttype,
            producten.naam, 
            producten.hoeveelheid, 
            producten.eenheid, 
            producten.kleur, 
            prodprice.eurotoner, 
            producten.ean, 
            producten.seourl, 
            image.image, 
            producten.staat, 
            producten.huismerk, 
            producten.shopping 
        FROM 
            webshops.producten 
            LEFT JOIN 
            webshops.prodprice 
            ON producten.artikelnr = prodprice.artikelnr
            LEFT JOIN (SELECT * FROM webshops.prodimage WHERE priority = 1) image ON producten.artikelnr = image.artikelnr 
        WHERE 
            image.image <> '' AND 
            producten.active = 1 AND 
            producten.ean <> '' AND 
            producten.shopping = 1
    ) AND 
    composition.artikelnr IN (
        SELECT 
            producten.artikelnr, 
            producten.merk, 
            producten.producttype, 
            producten.naam, 
            producten.hoeveelheid, 
            producten.eenheid, 
            producten.kleur, 
            prodprice.eurotoner, 
            producten.ean, 
            producten.seourl, 
            image.image, 
            producten.staat, 
            producten.huismerk, 
            producten.shopping 
        FROM 
            webshops.producten 
            LEFT JOIN webshops.prodprice ON producten.artikelnr = prodprice.artikelnr 
            LEFT JOIN (SELECT * FROM webshops.prodimage WHERE priority = 1) image ON producten.artikelnr = image.artikelnr 
        WHERE 
            image.image <> '' AND 
            producten.active = 1 AND 
            producten.ean <> '' AND 
            producten.shopping = 1
    )

【问题讨论】:

  • 子查询应该只返回一列。
  • 我的 SQL 不太好,如何解决?
  • 我已经重新格式化了你的 SQL;尽量不要将 SQL 全部写在一行上——这会使它们难以阅读、理解并降低其他人想要帮助您的可能性

标签: mysql sql mysql-error-1241


【解决方案1】:

你写了IN( SELECT more,than,one,column,here FROM..)

IN 要求您从子查询中准确选择一列,因此请选择与您正在 INning 的内容相关的任何一列。

也许是这样的:

SELECT DISTINCT 
    composition.compartikelnr, 
    composition.artikelnr,
    aantal 
FROM 
    webshops.composition 
WHERE 
    composition.compartikelnr IN (
        SELECT 
            producten.artikelnr 
        FROM 
            webshops.producten 
            LEFT JOIN 
            webshops.prodprice 
            ON producten.artikelnr = prodprice.artikelnr
            LEFT JOIN (SELECT * FROM webshops.prodimage WHERE priority = 1) image ON producten.artikelnr = image.artikelnr 
        WHERE 
            image.image <> '' AND 
            producten.active = 1 AND 
            producten.ean <> '' AND 
            producten.shopping = 1
    ) AND 
    composition.artikelnr IN (
        SELECT 
            producten.artikelnr
        FROM 
            webshops.producten 
            LEFT JOIN webshops.prodprice ON producten.artikelnr = prodprice.artikelnr 
            LEFT JOIN (SELECT * FROM webshops.prodimage WHERE priority = 1) image ON producten.artikelnr = image.artikelnr 
        WHERE 
            image.image <> '' AND 
            producten.active = 1 AND 
            producten.ean <> '' AND 
            producten.shopping = 1
    )

但我对您的数据结构一无所知,我只是根据名称找到了似乎与 artikelnr 相关的列。我不保证我发布的这段代码有效,只是它证明了我所说的“在 SELECT 查询中只选择 IN 括号内的一列”的意思

代码工作过一次,但我没有改变它。但现在它不再起作用了。

恐怕这不太可能.. 充其量我对此的唯一解释是 MySQL 有一些神奇的功能设置,允许您在 IN 中选择多个列并且它知道选择什么 (或者它盲目地选择第一列)并且有人更改了设置。如果它确实有这样的设置,将其更改为像其他数据库一样运行将是一件好事

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2021-03-11
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多