2010-06-28 93 views
0

这里是我的问题:我有一个SQL查询,使查询表的4个调用从另一个表中的组合列表返回它们的值。我最终得到了这个工作,出于某种原因,当我在没有DISTINCT的情况下运行查询时,我得到大量数据,所以我猜测我要么丢失了某些东西,要么不正确地执行此操作。如果这不仅起作用,而且还按照第一个颜色名称的字母顺序返回列表,这将非常棒。 我把我的SQL在这里,我希望我已经解释了这不够好:为什么我必须使用DISTINCT才能正常工作?

SELECT DISTINCT 
    colour1.ColourID AS colour1_ColourID, 
    colour1.ColourName AS colour1_ColourName, 
    colour1.ColourHex AS colour1_ColourHex, 
    colour1.ManufacturerColourID AS colour1_ManufacturerColourID, 
    colour2.ColourID AS colour2_ColourID, 
    colour2.ColourName AS colour2_ColourName, 
    colour2.ColourHex AS colour2_ColourHex, 
    colour2.QEColourID2 AS colour2_QEColourID2, 
    colour3.ColourID AS colour3_ColourID, 
    colour3.ColourName AS colour3_ColourName, 
    colour3.ColourHex AS colour3_ColourHex, 
    colour3.QEColourID3 AS colour3_QEColourID3, 
    colour4.ColourID AS colour4_ColourID, 
    colour4.ColourName AS colour4_ColourName, 
    colour4.ColourHex AS colour4_ColourHex, 
    colour4.QEColourID4 AS colour4_QEColourID4, 
    Combinations.ID, 
    Combinations.ManufacturerColourID AS Combinations_ManufacturerColourID, 
    Combinations.QEColourID2 AS Combinations_QEColourID2, 
    Combinations.QEColourID3 AS Combinations_QEColourID3, 
    Combinations.QEColourID4 AS Combinations_QEColourID4, 
    Combinations.ColourSupplierID, 
    ColourSuppliers.ColourSupplier 
FROM 
    ColourSuppliers INNER JOIN 
    (
     colour4 INNER JOIN 
     (
      colour3 INNER JOIN 
      (
       colour2 INNER JOIN 
       (
        colour1 INNER JOIN Combinations ON 
        colour1.ColourID=Combinations.ManufacturerColourID 
       ) ON colour2.ColourID=Combinations.QEColourID2 
      ) ON colour3.ColourID=Combinations.QEColourID3 
     ) ON colour4.ColourID=Combinations.QEColourID4 
    ) ON ColourSuppliers.ColourSupplierID=Combinations.ColourSupplierID 
WHERE Combinations.ColourSupplierID = ? 

感谢 斯蒂芬

+0

您可能想尝试重新格式化SQL查询以使其更易于阅读。 – Rich 2010-06-28 15:16:43

+0

你能格式化那段代码吗?请不要将它全部放在一行中?这会让事情变得更容易。 – 2010-06-28 15:16:49

+0

格式化它,但仍然是一个烂摊子 – 2010-06-28 15:21:06

回答

3

它看起来好像你可能在组合表中有四种颜色组合的每个组合有多个记录 - 发布表的结构可能会帮助我们解决这个问题。

将条款order by colour1.ColourName添加到查询的末尾应按字母顺序按第一个颜色名称排序。

+0

感谢大家的帮助。我实际上弄明白了这一点,并使其完美无缺! – stephmoreland 2010-07-15 14:36:49

0

我的猜测(它是一种猜测,因为你的SQL查询非常宽! )是你得到了笛卡尔产品。

相关问题