0

Table_A と Table_B の 2 つのテーブルがあり、これらのテーブルを結合して、結果として Table_c を取得したいと考えています。

テーブル A:

+-----------+-----------+---------+
| tableA_id | tableB_id | v_id    |
+-----------+-----------+---------+
| 1         | 2         | 27      |
| 2         | 3         | 27      |
| 3         | 3         | 28      |
| 4         | 1         | 26      |
| 5         | 2         | 26      |
| 6         | 3         | 26      |
| 7         | 1         | 24      |
| 8         | 1         | 25      |
+-----------+-----------+---------+

テーブル_B:

+-----------+-----------+
| tableB_id | s_name    | 
+-----------+-----------+
| 1         | s1        |
| 2         | s2        | 
| 3         | s3        | 
+-----------+-----------+

テーブル_c:

+-----------+-----------+-----------++--------+
| tableB_id | s_name    | tableA_id | v_id    |
+-----------+-----------+-----------+---------+
| 1         | s1        | null      | null    |
| 2         | s2        | 1         | 27      | 
| 3         | s3        | 2         | 27      |
+-----------+-----------+-----------+---------+

さまざまなクエリを試しましたが、目的の出力に到達できませんでした。これは MYSQL クエリです: *編集: テーブルの順序を逆にします。

SELECT s.tableB_id, s.s_name, v.tableA_id, v.v_id
FROM Table_B  as s 
left OUTER JOIN Table_A  as v
ON v.v_id=27

編集: 結果は、左側のすべての Table_B データであり、存在する場合は table_A データを割り当てるか、null にする必要があります。どうすればこれを作ることができますか?

最終編集: これが私が思いついた解決策です:

SELECT s.tableB_id , s.s_name, v.tableA_id, v.v_id
FROM Table_B s , Table_A v
WHERE v.v_id=27 AND v.tableB_id = s.tableB_id 

UNION

SeLECT s.tableB_id , s.s_name, null as tableA_id, null as v_id
FROM Table_B s
WHERE s.tableB_id NOT IN (SELECT s.tableB_id 
FROM Table_B s , Table_A v
WHERE v.v_id=27 AND v.tableB_id = s.tableB_id )
4

4 に答える 4

0

あなたは試すことができます:

SELECT tb.tableB_id, tb.s_name, ta.tableA_id, ta.v_id
FROM Table_B tb LEFT JOIN Table_A ta
  ON tb.tableB_id = ta.tableB_id

使用できるものを1つだけ選択するには:

SELECT tb.tableB_id, tb.s_name, ta.tableA_id, ta.v_id
FROM Table_B tb LEFT JOIN 
(SELECT * FROM Table_A 
 WHERE v_id = 27) ta
  ON tb.tableB_id = ta.tableB_id
于 2012-06-06T09:06:31.977 に答える
0
SELECT distinct s.tableB_id, s.s_name, v.tableA_id, v.v_id
 FROM Table_A as v 
 left OUTER JOIN Table_B as s
 ON v.tableB_id =s.tableB_id and v.v_id = 27;
于 2012-06-06T09:07:19.650 に答える
0

このクエリを使用して、結果が得られることを十分に期待してください

SELECT s.tableB_id, s.s_name, v.tableA_id, v.v_id
FROM Table_A as v 
left OUTER JOIN Table_B as s ON s.tableB_id=v.tableB_id
WHERE v.v_id=27
于 2012-06-06T09:08:57.623 に答える
0

順序を逆にしてb LEFT JOIN a、共通列の条件を追加します ( tableB_id):

SELECT s.tableB_id, s.s_name, v.tableA_id, v.v_id
FROM Table_B as s
  LEFT OUTER JOIN Table_A as v 
    ON  v.tableB_id = s.tableB_id
    AND v.v_id=27 ;
于 2012-06-06T09:17:09.150 に答える