SQL Query无法正常运行

时间:2014-10-02 17:22:13

标签: sql sql-server database

我的数据库中有下一个表格。我需要确定用户购买的所有图书以及购买特定图书的所有用户。

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'
        )
    )
);

1 个答案:

答案 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
                              ) 
      );

基本上......根据数据模型,您需要:

  • 加入livres
  • 加入目录
  • 加入produitsEtCommandes
  • 加入commandes

这将给你每个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)
               )
      )