2017-06-20 29 views
0

我在我的MySQL服务器数据库中的两个表有一个共同的列:在MySQL查询响应替换为空重复值

表1

+---------------------------------+ 
| columnA  | columnB   | 
+---------------------------------+ 
| 123   | lorem   | 
| 456   | ipsum   | 
| 456   | dolor   | 
+---------------------------------+ 

表2

+---------------------------------+ 
| columnA  | columnC   | 
+---------------------------------+ 
| 123   | sit   | 
| 123   | amet   | 
| 123   | consectetur | 
| 456   | adipiscing  | 
+---------------------------------+ 

我想获得所有值columnBcolumnC其中columnA123。我使用的查询是:

SELECT Table1.columnB, Table2.columnC 
FROM Table1 
INNER JOIN Table2 ON Table1.columnA = Table2.columnA 
WHERE Table1.columnA = '123'; 

这里的查询结果

+---------------------------------+ 
| columnB  | columnC   | 
+---------------------------------+ 
| lorem  | sit   | 
| lorem  | amet   | 
| lorem  | consectetur | 
+---------------------------------+ 

我得到所要求的结果,但我不这样想,这些重复的值作为columnB例。有没有办法用NULL或空白替换(最后两个)冗余值lorem?例如:

+---------------------------------+ 
| columnB  | columnC   | 
+---------------------------------+ 
| lorem  | sit   | 
|    | amet   | 
|    | consectetur | 
+---------------------------------+ 
+6

他们不是多余的,他们表现出的关系。如果要以不同方式显示数据,请在前端(应用程序或报告工具)的表示层中执行此操作,而不是在后端执行。 – under

+0

谢谢@under。是的,你是对的关系,并在前端做,但我只是想知道是否有任何完美/标准的方式在后端做到这一点。 – adi

+0

“我想获得columnA和columnC的所有值,其中columnA是123”不明确。人们会期望你的意思是在一个或另一个中的行,或者在两个行中(123)。但从查询和示例结果来看,您似乎指的是columnB-columnC对,其中columnB在Table1中显示为123,而在Table2中显示为123列。你不能用语言快捷方式,它给出了含糊不清,错误或无意义的东西(委婉语:“不清楚”)。你也可以打电话给你不想要的结果。请努力做得更清楚。 – philipxy

回答

2

您可以使用它。我希望它能为你工作。

;WITH temp AS 
(
    SELECT *, 
      Row_number() over(partition by A.columnA order by A.columnC) as [Rn]   
    FROM 
    (
     SELECT Table1.columnA, Table1.columnB, Table2.columnC 
     FROM Table1 
     INNER JOIN Table2 ON Table1.columnA = Table2.columnA 
     WHERE Table1.columnA = '123' 
    ) A 
) 
SELECT 
(CASE WHEN [Rn] = 1 THEN columnB ELSE NULL END) columnB 
,columnC 
FROM temp 
1

根据田阮的建议。

 SELECT IF(ctr = 1, columnB, '') columnB , 
       columnC 
     FROM (SELECT a.columnB , 
          b.columnC , 
          ROW_NUMBER() OVER (PARTITION BY a.columnA ORDER BY b.columnA) AS ctr 
        FROM  Table1 A 
          INNER JOIN Table2 B ON b.columnA = a.columnA 
        WHERE  a.columnA = '123' 
       ) tbl 

结果:

columnB  columnC 
    ----------- ------------ 
    lorem  sit 
       amet 
       consectetur 

    (3 row(s) affected)