J'ai une table1 (enregistrements 3) et Tabley2 (enregistrements 3). Où j'ai le nom de champ dans les deux. Maintenant, je veux générer un résultat de ces deux table, qui me montrera les deux enregistrements de table et ne prendront qu'un seul s'il y a duplicata. Donc, mes enregistrements de sortie attendus contiennent 5 rangées et non 6 rangées. Comment je fais ça?
Exemple:
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
J'ai essayé ceci:
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'
Suivi : Union avec l'endroit où la clause + extra large extra large.
SELECT * FROM
(
(
SELECT * FROM table1
WHERE ...
ORDER BY ...
LIMIT ...
)
UNION
(
SELECT * FROM table2
WHERE ...
ORDER BY ...
LIMIT ...
)
) as t
WHERE ...
ORDER BY ...
Voici la requête dont vous avez besoin:
SELECT name FROM
(
SELECT name FROM table1
UNION
SELECT name FROM table2
) A;
Voici quelques échantillons de code basé sur votre question:
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;
Voici l'exécution de cet exemple de code:
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>
Essaie !!!
Il semble que votre erreur soit causée en table2
La colonne que vous souhaitez filtrer est anothernamename
, pas name
, vous ne pouvez pas mettre un alias sur le WHERE
. Dans tous les cas, dans votre question, vous ne semblez pas vouloir filtrer vos résultats, de sorte que WHERE
est sans usage du tout. Votre requête devrait simplement être:
SELECT
FROM ( SELECT [name]
FROM table1
UNION
SELECT anothernamename
FROM table2) AS Data
WHERE ....
ORDER BY ....
LIMIT .....