2017-03-20 11 views
1

テーブル構造とデータ(Iは、IP /ドメインフィールドのデータはあまり意味がないかもしれません知っているが、これは説明のためである)を選択します。MySQLはすべての場所と1つ以上の場所はない

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_domainipdomainのフィールドの組み合わせにする(したがって、両方のフィールドに同じ値を持つレコードは存在できません)。

それぞれaccount_id, product_id, ip, domainフィールドの値を知っていて、同じaccount_id, product_idの値を持ち、ip, domainの値の1つ(または両方)の値が異なる行を取得する必要があります。

例:私は(レコード2はdifferent domainを持っているし、レコード3はdifferent ipを持っているので)account_id=1product_id=1ip=192.168.1.1domain=127.0.0.1/testは(それがrec_id 1と一致した)、私はIDが2と3でレコードを選択する必要があることを知っています。

だから、私は、クエリを使用:もちろん

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行ということです。いくつかの例も見つかりましたが、私の場合は何も働いていませんでした。

答えて

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') 
+0

おかげで検証されていないインストールされているいけません私は欲しい。 –

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のすべての行が、選択した行を除くすべて戻されます。

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 

PS:私はあなたの例では、道を動作するようです、mysqlはそれゆえクエリ構文が

関連する問題