2017-10-26 11 views
-1

ここでは、SQLの初心者が助けを必要としています。どのDBのSQL stmtでも構いません。私はpostgresqlでテストしています。 は、私は2 SQLテーブルの次の問題があります。別のテーブルによって条件付けされたSQLクエリ

表番号1

..................... 
|Boy Name| Girl Name | 
|--------------------| 
|Michael | Anne  | 
|Michael | Misty | 
|Michael | Simone | 
|Michael | Diane | 
|Michael | Ariel | 
|Jack | Misty | 
|Jack | Simone | 
|Jack | Anne  | 
|Sam  | Simone | 
|Sam  | Misty | 
|Sam  | Anne  | 
|Sam  | Mini  | 
|Sam  | Valery | 
---------------------- 

表番号2

.................................. 
|Boy Name | Anne | Misty | Simone| 
|--------------------------------| 
|Michael | yes | no | no | 
|Jack  | yes | yes | yes | 
|Sam  | no | no | yes | 
.................................. 

(IDKは質問のようです:女の子などはありません特定の少年。はい、いいえ、何もできません)。テーブル番号を経由して、すべての行「いいえ」少年は少女から取得2.

..................... 
|Boy Name| Girl Name | 
|--------------------| 
|Michael | Misty | 
|Michael | Simone | 
|Sam  | Misty | 
|Sam  | Anne  | 
---------------------- 

することができます - :

望ましい結果

クエリが2列を返すテーブルは、その結果を少年の名前の列と新しい列aと考えてください。もう1つは、テーブル番号2に「いいえ」がある少女の名前です。

+1

新しい女の子が増えるたびに、Table2に新しい列が追加されますか?その最終的なデザインか、あなたの提案したデザインですか?あなたの答えにかかわらず、ここの人々は本当にあなたが自分でそれをしようとしたことを証明するための何かを提供していない尋ねる場所のような質問を好きではない –

+0

こんにちは@DmitrijKultasev、表2にはランダムに選ばれた少女がいます。もう1つは、私はちょっと新しく、SQLを使い始めました。頭がおかげでありがとうございました。しかし、この時点でどのように起動するのか。 – Gizmo1337

+0

ここでSQLの学習を始めることができます:https://www.w3schools.com/sql/default.asp – Ralph

答えて

1

まず第一に、私は別のテーブルデザインを示唆している:

CREATE TABLE person 
(
id INT PRIMARY KEY, 
person_name VARCHAR(200), 
sex CHAR(1) 
); 
-- possible record: 1, 'John', 'M'; 2, 'Mary', 'F'; 

CREATE TABLE person_symphaty 
(
person_id INT, -- FK to person table 
symphaty_person_id INT -- FK to person table 
); 
-- you will store here if the person likes another one. 1 point here is that you can store that person doesn't like somebody, then you need some flag, for example is_symphaty INT (then 1 will mean likes, 0 will mean dislike) 

私はすべてのこれらのクエリをテストしていないとして、その後、クエリ自体

SELECT pm.name AS male_name, pf.name AS female_name 
    FROM person pm 
    CROSS JOIN person pf 
    WHERE pm.sex = 'M' AND pf.sex = 'F' 
NOT EXISTS (
    SELECT * FROM person_symphaty ps WHERE ps.person_id = pm.id AND ps.symphaty_person_id = pf.id 
    ) 

ミスがあるかもしれません。

+0

デザインアップデートをありがとうございます。私はこのアプローチを今夜学び、あなたにお返しします。 – Gizmo1337

関連する問題