Table1(レコード3)とtable2(レコード3)があります。両方にフィールド名があります。次に、これらの2つのテーブルから結果を作成します。これにより、両方のテーブルレコードが表示され、重複がある場合は1つしか取得されません。したがって、予想される出力レコードには6行ではなく5行が含まれます。それ、どうやったら出来るの?
例:
table1: table2:
+-------------------------+ +--------------------------------+
| Name | Name
--------------------------- +---------------------------------
| A | | C |
| B | | D |
| C | | E |
My Expected output is:
+-------------------------+
| Name | ID
---------------------------
| A | 1 table1
| B | 2 table1
| C | 3 table2 or table1 (no unique)
| D | 4 table2
| E | 5 table2
私はこれを試しました:
SELECT
name as name
FROM
table1
UNION
SELECT
anothernamename as name
FROM
table2
WHERE
name like '%C%'
Error: #1054 - Unknown column 'name' in 'where clause'
フォローアップ: Where節との結合+余分な大規模要件。
SELECT * FROM
(
(
SELECT * FROM table1
WHERE ...
ORDER BY ...
LIMIT ...
)
UNION
(
SELECT * FROM table2
WHERE ...
ORDER BY ...
LIMIT ...
)
) as t
WHERE ...
ORDER BY ...
必要なクエリは次のとおりです。
SELECT name FROM
(
SELECT name FROM table1
UNION
SELECT name FROM table2
) A;
ここにあなたの質問に基づいたいくつかのサンプルコードがあります:
use test
drop table if exists table1;
drop table if exists table2;
create table table1
(
id int not null auto_increment,
name varchar(10),
primary key (id)
);
create table table2 like table1;
insert into table1 (name) values ('A'),('B'),('C');
insert into table2 (name) values ('C'),('D'),('E');
SELECT name FROM
(
SELECT name FROM table1
UNION
SELECT name FROM table2
) A;
以下は、そのサンプルコードの実行です。
mysql> drop table if exists table1;
Query OK, 0 rows affected (0.03 sec)
mysql> drop table if exists table2;
Query OK, 0 rows affected (0.03 sec)
mysql> create table table1 (
-> id int not null auto_increment,
-> name varchar(10),
-> primary key (id)
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> create table table2 like table1;
Query OK, 0 rows affected (0.06 sec)
mysql> insert into table1 (name) values ('A'),('B'),('C');
Query OK, 3 rows affected (0.06 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> insert into table2 (name) values ('C'),('D'),('E');
Query OK, 3 rows affected (0.11 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT name FROM (SELECT name FROM table1
-> UNION SELECT name FROM table2) A;
+------+
| name |
+------+
| A |
| B |
| C |
| D |
| E |
+------+
5 rows in set (0.00 sec)
mysql>
試してみる !!!
エラーの原因であるようですen table2
フィルタリングする列はanothernamename
ではなくname
です。WHERE
にエイリアスを付けることはできません。いずれにせよ、あなたの質問では、結果をフィルタリングしたくないようで、WHERE
はまったく役に立ちません。クエリは次のようになります。
SELECT
FROM ( SELECT [name]
FROM table1
UNION
SELECT anothernamename
FROM table2) AS Data
WHERE ....
ORDER BY ....
LIMIT .....