0

他の 2 つのテーブルと多対多の関係を持つテーブルがあります。

CREATE TABLE assoc (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  ref1 INT NOT NULL,
  ref2 INT NOT NULL,
  INDEX composite_key (ref1, ref2)
);

ref2 の特定の値に一致するものと一致しないものがある ref1 との関連付けがあるかどうかを判断したいと考えています。例として、ref1 の関連付けが 1000 の値と ref2 の他の値で存在する場合に一致させたいとします。

INSERT INTO assoc (ref1, ref2) VALUES
  (100, 10),
  (100, 1000);

ただし、値 1000 のみが ref1 に関連付けられている場合、またはそれが他の値のみである場合、一致は与えられません。

INSERT INTO assoc (ref1,ref2) VALUES
  (101, 10),
  (102, 1000);

私は2つの解決策を思いつきました。1) 値に一致する行の結果を含む一時テーブルを作成し、そこから値に一致しない行を選択し、2) 同じテーブルを結合し、そのテーブルから一致しない基準を指定します。

CREATE TEMPORARY TABLE set
  SELECT ref1 FROM assoc
  WHERE ref2 = 1000;
SELECT assoc.ref1 FROM `set`
  JOIN assoc ON `set`.ref1 = assoc.ref1
  WHERE assoc.ref2 <> 1000;

SELECT assoc.ref1 FROM assoc 
  JOIN assoc AS `set` ON assoc.ref1 = `set`.ref1
  WHERE assoc.ref2 = 1000 AND `set`.ref2 <> 1000;

ただし、この一致を達成する他の方法があるかどうかを知りたいですか?

4

1 に答える 1