此查询需要从每组'Sheet_id'列中的"修订"列的最高值返回所有行。当我不执行或陈述时,它可以正常工作,但是我需要能够使用它们。输入字段是用于"项目编号",或者需要从10列的可能的10列中拉出该数字。
这是我的查询语句:
SELECT item_no, item_no1, item_no2, item_no3, item_no4, item_no5, item_no6,
item_no7, item_no8, item_no9, style, vendor_code, pgc, buyer, brand,
product_name, sheet_ID, revision, id
FROM product_sheets
WHERE item_no LIKE '$value' or item_no1 LIKE '$value' or
item_no2 LIKE '$value' or item_no3 LIKE '$value' or
item_no4 LIKE '$value' or item_no5 LIKE '$value' or
item_no6 LIKE '$value' or item_no7 LIKE '$value' or
item_no8 LIKE '$value' or item_no9 LIKE '$value' AND
revision IN (SELECT MAX(revision)
FROM product_sheets
GROUP BY sheet_ID
);
您必须在or
条件周围使用括号,没有它们,最后一个条件item_no9 LIKE '$value'
与IN
条件的AN和操作员有关。
WHERE (item_no LIKE '$value' or item_no1 LIKE '$value' or
item_no2 LIKE '$value' or item_no3 LIKE '$value' or
item_no4 LIKE '$value' or item_no5 LIKE '$value' or
item_no6 LIKE '$value' or item_no7 LIKE '$value' or
item_no8 LIKE '$value' or item_no9 LIKE '$value'
)
另外,将IN
条件更改为以下。
您不需要与另一个sheet_id的最大修订版匹配其sheet_id的最大修订版。
AND (sheet_ID,revision) IN (SELECT sheet_ID,MAX(revision)
FROM product_sheets
GROUP BY sheet_ID
);
而不是:
revision IN (SELECT MAX(revision)
FROM product_sheets
GROUP BY sheet_ID
);
您想要一个相关的子查询。在您的情况下,您可以将其写为:
revision = (SELECT MAX(ps2.revision)
FROM product_sheets ps2
WHERE ps2.sheet_ID = product_sheets.sheet_ID
);
但是,我强烈建议您在外部查询中使用表别名。
您还需要在where
中修复括号:
WHERE (item_no LIKE '$value' or item_no1 LIKE '$value' or
item_no2 LIKE '$value' or item_no3 LIKE '$value' or
item_no4 LIKE '$value' or item_no5 LIKE '$value' or
item_no6 LIKE '$value' or item_no7 LIKE '$value' or
item_no8 LIKE '$value' or item_no9 LIKE '$value'
) AND
revision = (SELECT MAX(ps2.revision)
FROM product_sheets ps2
WHERE ps2.sheet_ID = product_sheets.sheet_ID
);
如果$value
不使用通配符,则更简单地写成:
where '$value' in (item_no, item_no1, item_no2, . . .) and
revision = (SELECT MAX(ps2.revision)
FROM product_sheets ps2
WHERE ps2.sheet_ID = product_sheets.sheet_ID
);
,除了有关归一化的评论(强烈建议)外,您还需要了解有关使用查询参数将值传递到查询的问题。