首先,我应该做这样的事情:
SELECT * FROM `trades`
WHERE 15003 NOT IN (`slot1`, `slot2`, `slot3`, `slot4`)
这是正确的,在任何这些列中都给了我没有产品'15003'的rowes。 但是如果我不想在查询中包含“15003”或“15004”或“15008”中的任何内容呢? 我想这样做:
SELECT * FROM `trades`
WHERE 15003 NOT IN (`slot1`, `slot2`, `slot3`, `slot4`) AND
15004 NOT IN (`slot1`, `slot2`, `slot3`, `slot4`) AND
15008 NOT IN (`slot1`, `slot2`, `slot3`, `slot4`)
它有效,但我认为它不合适......
编辑: 每笔交易都有自己的ID和4个插槽。
答案 0 :(得分:1)
这是一个非常糟糕的设计选择,例如您对此查询的困难程度。而不是:
TABLE trades
slot1 INT
slot2 INT
slot3 INT
slot4 INT
应该正确地标准化为:
TABLE trades
trade_id INT
TABLE trades_slots
trade_id INT
slot_id INT
这将使您更多更具灵活性,并使查询更容易编写。
SELECT *
FROM trades t INNER JOIN trades_slots s
on t.trade_id = s.trade_id
WHERE s.slot_id NOT IN (15003, 15004, ...)
答案 1 :(得分:0)
使用如下查询:
Select *, GROUP_CONCAT(product1,product2,product3,product4) as prods
from Trades
group by ID
having prods not regexp '15003|15004|15008'