J'ai donc 4 tables et il y a des colonnes en double, et je veux sélectionner des colonnes de chaque table et afficher chaque colonne des 4 tables.
table système
+------+------+-------+--------+-------+------+--------+-------+----------+-------+---------+ | reg | name | ic | plate | color | year | make | model | capacity | type | maxload | +------+------+-------+--------+-------+------+--------+-------+----------+-------+---------+ | 1000 | John | 22222 | WWW123 | blue | 2015 | Honda | City | 1.5 | car | | | 1001 | Joe | 11111 | BBB987 | red | 2018 | Toyota | Hilux | 2.0 | truck | 3000 | +------+------+-------+--------+-------+------+--------+-------+----------+-------+---------+
3 Réponses :
Vous pouvez essayer ci-dessous -
select reg,name,A.ic,A.plate,color,year,make,model,capacity,type,maxload from systemtable A inner join ownertable B on A.ic=B.ic join ( select plate, color ,year ,make ,model, capacity,null as maxload from car union all select plate, color ,year ,make ,model, capacity,maxload from truck )C on A.plate=C.plate
Il montre que "le type de colonne dans la liste des champs est ambigu"
pourquoi la valeur de votre colonne ic est différente dans vos deux tables une est 22222 dans la table système et la table propriétaire 2222 ?? @Michael
Merci!! , j'ai donc essayé d'ajouter where plate = '% s' ou ic = '% s' derrière le sql, et cela provoquait cette erreur ** Colonne 'plate' dans la clause where est ambiguë **
utilisez A.plate @Michael
pour ma mise à jour sql, j'ai fait ceci: "UPDATE car` SET plate = '% s', color = '% s', année = '% s', make = '% s', model = '% s', capacit y =%. 2f WHERE regno = "`, mais je me rends compte qu'il n'y a pas de colonne regno dans la table car, que dois-je faire si j'insiste pour utiliser regno
pouvez-vous utiliser la plaque no pour trouver le reg no @Michael
C'est un cas pour les instructions de jointure. Puisque vous voulez trouver l'intersection entre les tables, nous allons utiliser UNION ALL + une jointure interne (en sélectionnant les valeurs correspondant dans plusieurs tables).
SELECT name, ic, req, plate, year, color, make, model, capacity, maxload FROM ((SELECT * FROM car c WHERE c.plate=plate) UNION ALL (SELECT * FROM truck AS t WHERE t.plate=plate)) INNER JOIN owner AS o ON o.ic=ic
Essayez de l'exécuter. Vous devrez peut-être spécifier tous les champs de voiture et de camion au lieu d'utiliser l'astérisque (*)
/ AF
Similaire à d'autres réponses. Mais voilà.
Structure de la table et données
+-------+-------+--------+---------+--------+--------+-------+---------+--------+-----------+---------+ | reg | name | ic | plate | type | color | year | make | model | capacity | maxload | +-------+-------+--------+---------+--------+--------+-------+---------+--------+-----------+---------+ | 1000 | john | 22222 | WWW123 | car | blue | 2015 | Honda | City | 1.5 | (null) | | 1001 | joe | 11111 | BBB987 | truck | red | 2018 | Toyota | Hilux | 2 | 3000 | +-------+-------+--------+---------+--------+--------+-------+---------+--------+-----------+---------+
Requête SQL
SELECT systemtbl.reg,
ownertbl.name,
systemtbl.ic,
systemtbl.plate,
systemtbl.type,
tmp.color,
tmp.year,
tmp.make,
tmp.model,
tmp.capacity,
tmp.maxload
FROM (SELECT plate, color, year, make, model, capacity, NULL AS maxload
FROM cartbl
UNION ALL
SELECT plate, color, year, make, model, capacity, maxload
FROM trucktbl) tmp
INNER JOIN systemtbl USING (plate)
INNER JOIN ownertbl USING (ic)
Sortie
XXX
Démo en ligne: http://sqlfiddle.com / #! 9 / 52596e / 3/0
@Michael, Juste un alias pour cette requête: 'SELECT plaque, couleur, année, marque, modèle, capacité, NULL AS maxload FROM cartbl UNION ALL SELECT plaque, couleur, année, marque, modèle, capacité, maxload FROM trucktbl '. Vous pouvez le remplacer par le nom de votre choix. (t1, tmp, abc, etc.). Si cela rend la requête plus difficile à comprendre, je la remplacerai par 'tmp' .
Il n'y a pas de Java ou de PHP impliqué ici ... En ce qui concerne le SQL, dans quelle mesure êtes-vous familier avec les jointures et la sélection de colonnes individuelles? Aussi pourquoi avez-vous une table pour voitures et camions si la seule différence est la charge maximale? Avoir une table (ou une vue qui combine les deux) avec un «type» de colonne supplémentaire rendrait la requête beaucoup plus facile.
Astuce:
JOIN. EtJOINà nouveau.Ok, je vais l'essayer
Je combinerais la table du camion et de la voiture et autoriserais la charge maximale à être nulle. Plus facile