[英]MySQL query returns more rows than intended, how do i only return the highest value of one column from each group?
該查詢需要返回“ sheet_ID”列的每組中具有“ revision”列最高值的所有行。 當我不執行OR語句但我需要能夠使用它們時,它會很好地工作。 輸入字段用於“項目編號”,or語句需要從可能的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
);
代替這個:
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
);
並且,除了有關規范化的注釋(強烈建議)外,您還需要學習有關使用查詢參數將值傳遞給查詢的知識。
因此必須將日方括號or
條件,沒有他們只有最后一個條件item_no9 LIKE '$value'
與一個與運營商相關的IN
條件。
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
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.