我收到错误代码“#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
)
答案 0 :(得分: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中选择多个列,并且知道该选择什么(或盲目选择第一列),然后有人更改了设置。如果确实有这样的设置,那么将其更改为与其他数据库一样的行为将是一件好事