0

我收到错误代码“#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
    )
4

1 回答 1

0

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

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

也许是这样:

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 中选择多个列并且它知道选择什么(或者盲目地选择选择第一列)并且有人更改了设置。如果它确实有这样的设置,将其更改为像其他数据库一样运行将是一件好事

于 2018-11-13T13:25:10.300 回答