zoukankan      html  css  js  c++  java
  • SQL 表连接查询出现重复列,由此理清LEFT JOIN、INNER JOIN的区别

    1、先创建两个临时表,并插入数据

    CREATE TABLE #TEMP1
    (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    name NVARCHAR(50)
    )

    CREATE TABLE #TEMP2
    (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    name NVARCHAR(50)
    )

    INSERT INTO #TEMP1
    ( name )
    VALUES (
    N'A' -- name - nvarchar(50)
    ),('B')


    INSERT INTO #TEMP2
    ( name )
    VALUES (
    N'A' -- name - nvarchar(50)
    ),('B'),('C'),('B'),('C')

    2、

    #TEMP1 记录如下

    ID name

    1 A
    2 B

    #TEMP2 记录如下

    ID name

    1 A
    2 B
    3 C
    4 B
    5 C

    3、内连接 记录如下

    SELECT T1.ID,T1.name FROM #TEMP1 AS T1 INNER JOIN #TEMP2 AS T2 ON T1.name=T2.name   

    ID name

    1 A
    2 B
    2 B

    4、左连接 记录如下

    SELECT T1.ID,T1.name FROM #TEMP1 AS T1 LEFT JOIN #TEMP2 AS T2 ON T1.name=T2.name

    ID name

    1 A
    2 B
    2 B

    结果说明:

    1、Left Join(左联接)
    以左表为中心,返回左表中符合条件的所有记录以及右表中联结字段相等的记录——当右表中无相应联接记录时,返回空值。
    2、Inner Join(等值连接)
    返回两个表中联结字段相等的行。

    注意:如出现重复结果列,要从出现重复源头表的列,开始过滤!

    先找出重复的列

    SELECT name FROM #TEMP2 GROUP BY name  HAVING COUNT(1)>1

    再用EXISTS 和NOT IN UNION ALL

  • 相关阅读:
    Model
    暑假集训-计算几何
    暑假集训-字符串
    将博客搬至CSDN
    codeforces #519 A A. Multiplication Table (暴力)
    bc #54 A problem of sorting
    vimrc备份
    codeforces # 317 div 2 B. Order Book(模拟)
    codeforces #317 div2 A. Arrays (水)
    bc #52 div 2 A ||hdoj5417 Victor and Machine (模拟)
  • 原文地址:https://www.cnblogs.com/markli/p/6052406.html
Copyright © 2011-2022 走看看