左连接表与异或

时间:2018-05-08 21:03:55

标签: sql sql-server left-join

有没有办法在一个且只有一个可能的条件下将两个表连接在一起?加入条件" a"或" b"可以复制行,但我希望只加入一次。我提出了一个潜在的解决方案,但我想知道是否有更光滑的方式来做它。

例如:

    public string CharPtrToString(MycharArray chararray)
    {
        IntPtr ipp = (IntPtr)chararray;
        string s = Marshal.PtrToStringAnsi(ipp)
        //need to free Ipp?
        return s;
    }

    public struct MyStruct
    {
          public Int int1;
          public MyCharArray charArray;
    }

    public unsafe struct MyCharArray
    {
          public char* charPointer;
    }

这会将表连接到col1或col2但不能同时加入。有没有更简洁的方法呢?

2 个答案:

答案 0 :(得分:0)

效率不高但我认为更清楚

SELECT *
FROM TableA a
LEFT JOIN TableB b
  ON     (a.col1 = b.col1 or  a.col2 = b.col2)
 AND NOT (a.col1 = b.col1 and a.col2 = b.col2)

答案 1 :(得分:0)

你的方法有效。如果您只需要url('', include('django.contrib.auth.urls')),中的一列(或少数几列),我建议:

b

SELECT a.*, COALESCE(b.col3, b2.col3) FROM TableA a LEFT JOIN TableB b ON a.col1 = b.col1 LEFT JOIN TableB b2 ON a.col1 <> b2.col1 AND a.col2 = b2.col2; 条件中删除OR允许优化器生成更好的执行计划。