Voici mon tableau
Select
Buying.Customer_ID, Buying.Product_ID, Product.ID,
Product.Name, Customer.ID,
Customer.Customer_FName, Customer.Customer_Lname
from
((Buying
inner join
Product on Buying.Product_ID = Product.ID)
inner join
Customer on Buying.Customer_ID = Customer.ID)
where
Product.Address like '%Burwood%';
J'essaie de trouver tous les clients qui ont acheté un produit avec l'adresse de leur entreprise dans «Burwood» et indiquez l'identifiant du client, les noms, l'identifiant du produit, le nom du produit et l'adresse du produit
CREATE TABLE Customer
(
ID CHAR(50),
Customer_FName CHAR(50),
Customer_Lname CHAR(50)
);
CREATE TABLE Buying
(
Customer_ID CHAR(50),
Product_ID CHAR(50),
Order_Time CHAR(50)
);
CREATE TABLE Product
(
ID CHAR(50),
Name CHAR(50),
Address CHAR(50)
);
Je veux combiner trois tableaux mais il montre «non lignes sélectionnées '.
Je donne également un exemple de tableau de données
3 Réponses :
Essayez ceci:
SELECT C.*,B.*, P.* FROM Customer C,Buying B, Product P WHERE B.Product_ID=P.ID AND B.Customer_ID=C.ID AND P.Address LIKE '%Burwood%';
Veuillez ne pas perpétuer cette syntaxe de virgule, qui a été remplacée il y a plus de 20 ans par la syntaxe de jointure moderne.
Elle peut être valable, mais elle n'est pas considérée comme idéale, et comme SO est d'aider les gens à faire les choses de la meilleure façon, une syntaxe qui a été remplacée en 1992 (il y a plus de 25 ans) devrait être reléguée à l'histoire. Je soupçonne que la seule raison pour laquelle il est toujours pris en charge par une base de données moderne est la compatibilité descendante.
Cela ne fait pas un iota de différence pour les jointures internes et réduit la verbosité des requêtes. stackoverflow.com/questions/354070 /…
Veuillez essayer ceci, cela fonctionne pour moi:
Select B.Customer_ID, B.Product_ID, P.ID, P.Name, C.ID, C.Customer_FName, C.Customer_Lname from Buying B INNER JOIN Product P ON B.Product_ID = P.ID INNER JOIN Customer C ON B.Customer_ID = C.ID WHERE P.Address LIKE '%Burwood%'
Une raison pour laquelle vous avez choisi CHAR comme type de données pour toutes les colonnes de toutes les tables? Pour les colonnes basées sur CHAR, les DB ont tendance à remplir les valeurs jusqu'à la largeur de colonne définie. Cela dit, ce n'est pas la raison pour laquelle vous n'obtenez pas de résultat. Vous voudrez peut-être vérifier si, lors de l'insertion, vous ajoutez un espace supplémentaire ou des caractères non imprimables dans les ID, ce qui entraîne l'échec des jointures internes.
Je suggère de changer les champs en VARCHAR à la place, de valider vos insertions, puis d'effectuer une requête comme je l'ai démontré ci-dessous. Vous allez commencer à obtenir des résultats, comme moi ..
select b.product_id, p.name, b.customer_id, c.customer_fname, c.customer_lname from buying b join product p on b.product_id = p.id join customer c on b.customer_id = c.id where lower(p.address) like '%burwood%'
CREATE TABLE Customer (
ID varchar(50),
Customer_FName varchar(50),
Customer_Lname varchar(50)
);
CREATE TABLE Buying (
Customer_ID varchar(50),
Product_ID varchar(50),
Order_Time varchar(50)
);
CREATE TABLE Product (
ID varchar(50),
Name varchar(50),
Address varchar(50)
);
insert into customer values('10001', 'John', 'Smith');
insert into Buying values('10001', '772', '2016/09/01');
insert into Product values('772', 'Telephone', '22 Ave, Burwood');
je suis vraiment désolé car j'ai entré une ancienne requête SQL pour ma table
Pour commencer, utilisez lower (Product.Address) LIKE '% burwood%' . Si cela ne fonctionne toujours pas, partagez des exemples de données
@Gro ça ne marche pas. J'ai déjà mis des exemples de données