SELECT
    B.[画面用Pattern] as 1,
    C.[画面用Pattern] as 2,
    D.[画面用Pattern] as 3,
    E.[画面用Pattern] as 4,
    F.[画面用Pattern] as 5,
    G.[画面用Pattern] as 6,
    H.[画面用Pattern] as 7,
    I.[画面用Pattern] as 8,
    J.[画面用Pattern] as 9,
    K.[画面用Pattern] as 10
FROM [dbo].[calendar] A
LEFT JOIN [dbo].[tariff]  B ON A.[bango]=B.[bango] AND A.[Pattern_1]= B.[Pattern]
LEFT JOIN [dbo].[tariff]  C ON A.[bango]=C.[bango] AND A.[Pattern_2]= C.[Pattern]
LEFT JOIN [dbo].[tariff]  D ON A.[bango]=D.[bango] AND A.[Pattern_3]= D.[Pattern]
LEFT JOIN [dbo].[tariff]  E ON A.[bango]=E.[bango] AND A.[Pattern_4]= E.[Pattern]
LEFT JOIN [dbo].[tariff]  F ON A.[bango]=F.[bango] AND A.[Pattern_5]= F.[Pattern]
LEFT JOIN [dbo].[tariff]  G ON A.[bango]=G.[bango] AND A.[Pattern_6]= G.[Pattern]
LEFT JOIN [dbo].[tariff]  H ON A.[bango]=H.[bango] AND A.[Pattern_7]= H.[Pattern]
LEFT JOIN [dbo].[tariff]  I ON A.[bango]=I.[bango] AND A.[Pattern_8]= I.[Pattern]
LEFT JOIN [dbo].[tariff]  J ON A.[bango]=J.[bango] AND A.[Pattern_9]= J.[Pattern]
LEFT JOIN [dbo].[tariff]  K ON A.[bango]=K.[bango] AND A.[Pattern_10]= K.[Pattern]就[dbo].[calendar] 和[dbo].[tariff]两个表
还能用方法来实现这样的sql?

解决方案 »

  1.   

    B..C..D........这些不都是代表表 [dbo].[tariff] ?
    看着就是怪怪的
      

  2.   

    晕···看得眼花··把表结构贴上来 然后说明你的需求···肯定能解决··sql 没这样写的··两个表··搞这么多left join ···
      

  3.   

    三令五申不要用LEFT JOIN..哎..影响性能了吧
      

  4.   

    这个查询没有什么奇怪的,普通的“交叉二维表”。例如一个表中有“学生、课程、成绩”字段,要形成每一个学生各个课程的平均分的一个二维统计表,当然要使用Left Join,而且有多少的课程就需要多少个Left Join。
      

  5.   

    LEFT JOIN 消耗的资源非常之多,因为它们包含与 NULL(不存在)数据匹配的数据。在某些情况下,这是不可避免的,但是代价可能非常高。LEFT JOIN 比 INNER JOIN 消耗资源更多...避免使用 LEFT JOIN 时速度降低的最简单方法是尽可能多地围绕它们设计数据库。例如,假设某一产品可能具有类别也可能没有类别。如果 Products 表存储了其类别的 ID,而没有用于某个特定产品的类别,则您可以在字段中存储 NULL 值。然后您必须执行 LEFT JOIN 来获取所有产品及其类别。您可以创建一个值为“No Category”的类别,从而指定外键关系不允许 NULL 值。通过执行上述操作,现在您就可以使用 INNER JOIN 检索所有产品及其类别了。虽然这看起来好像是一个带有多余数据的变通方法,但可能是一个很有价值的技术,因为它可以消除 SQL 批处理语句中消耗资源较多的 LEFT JOIN。在数据库中全部使用此概念可以为您节省大量的处理时间。