2017-03-27 1 views
0

Je voudrais juste sélectionner les tables bothe où table1.id = 1 J'ai 2 tables table1: voitures. Tableau 2: propriétaire la table 1 n'a pas toutes les informations donc je voudrais obtenir toutes les informations dans une colonne. Je veux dire que j'ai besoin du propriétaire-téléphonecomment sélectionner 2 tables en sql mais pas de répétition?

Je fais comme ça mais je reçois toute la colonne. comment ajouter l'identifiant?

drop table cars; 
drop table owners; 
CREATE TABLE cars(id INTEGER(11) PRIMARY KEY AUTO_INCREMENT, model TEXT,   price TEXT, name TEXT); 
create table owners(
id INTEGER(11) PRIMARY KEY AUTO_INCREMENT, 
phone varchar(25), 
name varchar(25), 
constraint owners_fk foreign key(id) references carss(id) 
); 

insert into cars(model , price, name)values('bmw', '10.000', 'thomas'); 
insert into cars(model , price, name)values('fiat', '5.000', 'none'); 
insert into owners(phone , name)values('0333333','thomas'); 
insert into owners(phone , name)values('04444444','Tom'); 


SELECT * FROM cars 
LEFT JOIN owners ON cars.name = owners.name 
UNION ALL 
SELECT * FROM cars 
RIGHT JOIN owners ON cars.name = owners.name; 

les 2 tables seront sélectionnés, mais comment puis-je sélectionner une seule colonne de la pleine union pour obtenir toutes les infos dans une colonne? J'utilise mysql.

avec jointure gauche est ok mais je ne les noms pas doubles: show picture of result

si je viens d'utiliser le rejoindre gauche:

SELECT * FROM cars 
LEFT JOIN owners ON cars.name = owners.name where name='thomas'; 
+0

supprimer le 'ALL'? 'UNION' supprime les doublons. – maraca

+0

Marquez la base de données que vous utilisez. –

+0

Quelle base de données utilisez-vous? – GurV

Répondre

0

Je suppose que vous utilisez MySQL, qui ne supporte pas full outer join. La façon correcte de le faire est de compiler une liste de tous les noms et ensuite utiliser left join:

select n.name, o.id, o.phone, c.model, c.price 
from (select name from owners union select name from cars) n left join 
    owners o 
    on o.name = n.name left join 
    cars c 
    on c.name = n.name; 
+0

hi @Gordon Linoff, mais si j'ai beaucoup de noms, il me faudra plus de temps pour tout taper comme votre code !!! – Json

+0

maintenant je reçois un peu de bon résultat avec: '' SELECT * FROM voitures LEFT JOIN propriétaires SUR cars.name = owners.name où name = 'thomas'; mais les noms (champs) ne doivent pas être répétés les champs doubles ' – Json

+0

@Json. . . Lister juste les colonnes que vous voulez dans le SELECT. –