我的数据库中有下一个表格。我需要确定用户购买的所有图书以及购买特定图书的所有用户。
http://i.imgur.com/IPb0bmi.png
这些是我的sql请求,但出了点问题:
select *
from Livres
where idCatalogue_fk in (
select idCatalogue_fk
from ProduitsEtCommandes
where idCommande_fk in (
select idCommande_fk
from CommandesEtUtilisateurs
where idUtilisateur_fk=1
)
);
select *
from Utilisateurs
where idUtilisateur in (
select idUtilisateur_fk
from CommandesEtUtilisateurs
where idCommande_fk in (
select idCommande_fk
from Catalogue
where idCatalogue in (
Select idLivre
from Livres
where idCatalogue=1
and title='Poezii'
)
)
);
答案 0 :(得分:2)
我不知道法语... 可能存在包含表格和列名称的拼写错误 ...使用where
为特定用户或图书添加过滤器。
修改强>
你可以这样做吗? (如果这是作业,这不是数据库模型的一个很好的例子......顺便说一句)select * from livres where idCatalogue_fk in (
select idCatalogue_fk from produitsEtCommandes where idUtilisasteur_fk=1
);
-- note the misspelling comment i made up top... the ID in productsNCommands
select * from utilisateurs where idUtilisateurs in (
select idUtilisasteur_fk from produitsEtCommandes where idCatalogue_fk in (
select idCatalogue_fk from livres where idLivre=1
)
);
基本上......根据数据模型,您需要:
这将给你每个livre-commande协会。然后根据您的需要进行过滤。
查找与用户Kim关联的所有图书(假设只有一个用户具有该名称):
select *
from livres
join catalogue on livres.idCatalogue_fk=catalogue.idCatalogue
join produitsEtCommandes on produitsEtCommandes.idCatalogue_fk=catalogue.idCatalogue
join commandes on commandes.idCommande=produitsEtCommandes.idCommande_fk
where commandes.nomClient = 'Kim'
所以....你可以这样做,然后.....?
select * from livres where idLivre in (
select distinct idLivre
from livres
join catalogue on livres.idCatalogue_fk=catalogue.idCatalogue
join produitsEtCommandes on produitsEtCommandes.idCatalogue_fk=catalogue.idCatalogue
where idCommandes_fk=1)
或....(太丑了)
select *
from livres, catalogue, produitsEtCommandes, commandes
where livres.idCatalogue_fk=catalogue.idCatalogue and
produitsEtCommandes.idCatalogue_fk=catalogue.idCatalogue and
commandes.idCommande=produitsEtCommandes.idCommande_fk and
livres.title = 'Brave New World'
哦,不,......
select * from livres where idCatalogue_fk in (
select distinct idCatalogue from catalogue where idCatalogue in (
(select distinct idCatalogue_fk from produitsEtCommandes where idCommandes_fk=1)
)
)