0

私はMySQLに非常に慣れていないことを覚えておいてください。

結果のセットを選択しようとすると、スタックします。

select A.userNum from tableOne A, tableTwo B where A.userNum!=B.userNum;

(テーブル A にはユーザーの userNum と電話番号が含まれます。テーブル B にはユーザーのアドレス帳が含まれます。)

ResultSet には、類似した結果の複数のセットが含まれています。各結果では、where 句で指定した 1 つの userNum が省略されています。(この質問の最後を参照)

「where A.userNum!=B.userNum」句を満たす結果を 1 つだけ含む ResultSet を取得するにはどうすればよいですか?

これは私が問題を抱えている特定のケースです。

users と addressbook の 2 つのテーブルがあるとします。

テーブル 'addressbook' は基本的にアドレス帳です。テーブル 'users' は、ユーザーの電話番号を含むテーブルです。

テーブルを作成しました。簡単にするために、「userNum」と「phone」番号は「users」テーブルで同じです。

create table users (
    userNum int,
    phone char(11)
);
insert into users values (1,'1');
insert into users values (2,'2');
insert into users values (3,'3');
insert into users values (4,'4');
insert into users values (5,'5');
insert into users values (6,'6');
insert into users values (7,'7');
insert into users values (8,'8');
insert into users values (9,'9');
insert into users values (10,'10');

create table addressbook (
    userNum int,
    phone char(11)
);
insert into addressbook values(1,'2');
insert into addressbook values(1,'3');
insert into addressbook values(2,'3');
insert into addressbook values(3,'4');
insert into addressbook values(5,'7');
insert into addressbook values(5,'8');
insert into addressbook values(6,'7');
insert into addressbook values(7,'8');
insert into addressbook values(7,'9');
insert into addressbook values(9,'10');

次に、友達の友達の「userNum」を調べます。私がuserNum 1だとしましょう。

まず、友人の「userNum」を見つけました。

select A.userNum from users A, addressbook B where B.userNum=1 and B.phone=A.phone;

次に、このクエリを使用して、友人の友人の「userNum」を見つけました。

select A.userNum from users A, addressbook B, (select A.userNum from users A, addressbook B where B.userNum=1 and B.phone=A.phone) C 
where C.userNum=B.userNum and A.phone=B.phone;

結果は 3,4 です。(奇妙なことに、サブクエリを使用すると、ここの ResultSet は複製されません。)


問題はここから始まります。

上記の select ステートメントをサブクエリ B として使用して、私の友人の友人ではない人の 'userNum' を取得しようとしました。

select A.userNum from users A, 
    (select A.userNum from users A, addressbook B, (select A.userNum from users A, addressbook B where B.userNum=1 and B.phone=A.phone) C where C.userNum=B.userNum and A.phone=B.phone) B 
    where A.userNum!=B.userNum;

結果

userNum
1
2
4
5
6
7
8
9
10
1
2
3
5
6
7
8
9
10

結果からわかるように、結果には 2 つのセットがあります。最初の結果では userNum 3 が省略され、2 番目の結果では userNum 4 が省略されます。

userNum 3,4 を省略した userNum のセットを取得するにはどうすればよいですか?

4

1 に答える 1

2
select A.userNum from users A where A.userNum NOT IN  (select A.userNum from users A, addressbook B, (select A.userNum from users A, addressbook B where B.userNum=1 and B.phone=A.phone) C where C.userNum=B.userNum and A.phone=B.phone) ;
于 2013-10-19T07:33:51.887 に答える