表结构和数据(我知道IP /域字段中的数据可能没有多大意义,但这仅用于说明目的):
rec_id | account_id | product_id | ip | domain | some_data
----------------------------------------------------------------------------
1 | 1 | 1 | 192.168.1.1 | 127.0.0.1/test | abc
2 | 1 | 1 | 192.168.1.1 | 127.0.0.1/other | xyz
3 | 1 | 1 | 192.168.1.2 | 127.0.0.1/test | ooo
表格具有ip_domain
和ip
字段组合的唯一索引domain
(因此两个字段中的值相同的记录不可存在)。
在每种情况下,我都知道account_id, product_id, ip, domain
字段的值,并且我需要获取具有SAME account_id, product_id
值且其中一个(或两个)ip, domain
个值的其他行不同。
示例:我知道account_id=1
,product_id=1
,ip=192.168.1.1
,domain=127.0.0.1/test
(所以它匹配rec_id
1),我需要选择带ID的记录2和3(因为记录2有different domain
而记录3有different ip
)。
所以,我使用了查询:
SELECT * FROM table WHERE
account_id='1' AND product_id='1' AND ip!='192.168.1.1' AND domain!='127.0.0.1/test'
当然,它返回0行。看着mysql multiple where and where not in并写道:
SELECT * FROM table WHERE
account_id='1' AND product_id='1' AND installation_ip NOT IN ('192.168.1.1') AND installation_domain NOT IN ('127.0.0.1/test')
我的猜测是这个查询是相同的(只是格式化不同的方式),所以再次0行。还找到了一些例子,但没有一个在我的案例中有效。
答案 0 :(得分:3)
语法正确,但您使用了错误的逻辑操作
SELECT *
FROM table
WHERE account_id='1' AND product_id='1' AND
(ip != '192.168.1.1' OR domain != '127.0.0.1/test')
答案 1 :(得分:0)
Select * from table
Where ROWID <> myRowid
And account_id = '1'
And product_id = '1';
myRowid是dbms为每条记录提供的唯一ID,在这种情况下,您需要使用select语句检索它,然后在使用此select时将其传回。除了您选择的那个之外,这将返回account_id = 1和product_id = 1的所有行。
答案 2 :(得分:0)
如果您的输入未定义/或者您想要列表,那么您可能会看到Group By子句。此外,您可以查看group_concat
查询类似于:
SELECT ACCOUNT_ID, PRODUCT_ID, GROUP_CONCAT(DISTINCT IP||'|'||DOMAIN, ','), COUNT(1)
FROM TABLE
GROUP BY ACCOUNT_ID, PRODUCT_ID
P.S。:我没有安装mysql因此查询语法未经验证