【问题标题】:SQL CROSS JOIN questionSQL CROSS JOIN 问题
【发布时间】:2011-07-03 01:53:21
【问题描述】:

我的 SQL 查询有点问题。

我有两张桌子:

表1

id  guid  title     D0      D1     D2
-----------------------------------------
1   guid1 Title1    0.123  -0.235  0.789
2   guid2 Title2   -0.343   0.435  0.459
3   guid3 Title3    0.243  -0.267 -0.934
...
100 guid4 Title100 -0.423   0.955  0.029

和表 2(注意它具有相同的架构,只是数据不同)。

id  guid  title     D0      D1     D2
----------------------------------------
1   guid1 Title1    0.233  -0.436 -0.389
2   guid2 Title2   -0.343   0.235  0.789
3   guid3 Title3    0.573  -0.067 -0.124
...
100 guid4 Title100 -0.343   0.155  0.005

我试图弄清楚如何编写一个SELECT 语句,它返回所有标题WHERE ABS(Table1_D0*Table2_D0)+ABS(Table1_D1*Table2_D1)+ABS(Table1_D2*Table2_D2) 的所有组合都小于阈值(可能是硬编码)。

到目前为止,我正在尝试使用CROSS JOIN,但我不确定这是否是正确的方法。

这有意义吗? Table1, row1 对 Table2 的所有行,然后 Table1, row2 对 Table2 的所有行

如果重要的话,我正在使用 MS SQL。

非常感谢! 布雷特

【问题讨论】:

    标签: c# .net sql sql-server cross-join


    【解决方案1】:
    SELECT t1.title
    FROM Table1 t1
    CROSS JOIN table2 t2
    WHERE ABS(t1.D0*t2.D0)+ABS(t1.D1*t2.D1)+ABS(t1.D2*t2.D2)<10
    

    【讨论】:

    • 当数据库不支持 CROSS JOINS 时是否有替代语法?例如sql 2000
    • @Conrad SELECT t1.title FROM Table1 t1, table2 t2 是一样的
    • @Conrad Frix,SQL Server 2000 确实支持上述语法。
    【解决方案2】:
    SELECT *
      FROM  Table1 a inner join
            Table2 b on a.Id=b.Id
    where   ABS(a.D0*b.D0)+ABS(a.D1*b.D1)+ABS(a.D2*b.D2)<=@Value
    

    【讨论】:

      【解决方案3】:

      CROSS JOIN 是正确的选择,而 CROSS JOIN 与完全不加入相同(请参阅 Snowbear 的回答)。

      【讨论】:

        【解决方案4】:
        select t1o.title
        from Table1 t1o
        where not exists
        (
            -- none of the cross-joined rows for t1o must be above the threshold
            select t1.title
            from Table1 t1
            cross join Table2 t2
            where t1.id = t1o.id -- only the cross joined rows for the current t1o row
            -- inverted b/c not exists
            and abs(t1.D0*t2.D0)+abs(t1.D1*t2.D1)+abs(t1.D2*t2.D2) > 10 
        )
        

        【讨论】:

          猜你喜欢
          • 2013-07-19
          • 1970-01-01
          • 1970-01-01
          • 2014-02-07
          • 1970-01-01
          • 1970-01-01
          • 2011-03-25
          • 1970-01-01
          相关资源
          最近更新 更多