作者Talenius (Harmonic Inspirations)
看板Database
标题[SQL ] JOIN如何不抓出重复的资料
时间Sat Jan 7 13:18:14 2017
(针对
SQL 语言的问题,用这个标题。请用 Ctrl+Y 砍掉这行)
资料库名称:Microsoft SQL Server
资料库版本:2014
内容/问题描述:
如表A 表B
ID Status ID Status
张三 1 张三 1
李四 2 李四 1
王五 2 王五 2
SELECT
(SELECT 表A.ID
From 表A JOIN 表B ON 表A.ID = 表B.ID
WHERE 表A.Status = 2 AND 表B.Status = 1) AS 2
(因为需要很多栏位显示状态(如2)但问题都一样,所以以下省略)
产生结果:
李四
李四
请问:
1. 为何李四出现二次?
2. 如何只让李四出现一次?
3. 若是SELECT COUNT(表A.ID),如何显示1?(即只算李四一个)
谢谢
--
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.245.65.133
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1483766297.A.2BD.html
1F:推 likesp999: 照你的打是只有李四 01/07 18:15
2F:→ Talenius: 会出现二次李四,但我只要一次 01/07 19:01
3F:推 likesp999: 我照你的规格跟语法来测试,的确只有李四一笔,还是你 01/07 19:35
4F:→ likesp999: 本身资料有重复? 01/07 19:35
原本的表A与表B的栏位都一样,如:
如表A 表B
ID Status Car Color Man ID Status…
张三 1 ss cs mf 张三 1
李四 2 ss cf mf 李四 1
王五 2 ss cf mw 王五 2
这是原本的程式内容:
SELECT
(SELECT 表A.ID
From 表A JOIN 表B ON 表A.ID = 表B.ID
WHERE 表A.Car = 'ss' AND 表A.Color = 'cf' AND 表A.Status = '2'
AND 表A.Man = 'mf' AND 表B.Status = 1) AS 2,
出现李四二笔的情况(确认过表A与表B分别各只有一个李四)
但应该不论筛选多少表A的条件,应该都是只有一笔
※ 编辑: Talenius (220.137.116.33), 01/07/2017 20:43:54
5F:推 likesp999: 你可以加一下inner 不过结果因该一样,但你的语法没问 01/07 20:52
6F:→ likesp999: 体,你可以自己就用这个范例打看看,就是你想要的结果! 01/07 20:52
7F:→ likesp999: ! 01/07 20:52
8F:→ Talenius: 改成INNER JOIN,仍然是一样的错误 01/07 21:15
9F:→ tedcat: sql没问题,肯定是你资料面有漏 01/08 15:45
11F:→ tedcat: 要码表A李四符合条件的 有两笔 或是表B有两笔 01/08 15:46
12F:→ tedcat: 或是试着join栏位那边 加上定序让他相同(collate) 01/08 16:05
13F:→ Talenius: 感谢L大与T大的帮忙,重新载入资料後汇出资料就对了 01/09 07:20
14F:→ Talenius: 我不确定为何之前同个csv档会汇入二次 01/09 07:21
15F:→ Talenius: 感谢各位的帮忙 01/09 07:21
16F:→ adrianshum: 好歹设个primary key 或unique constraint 嘛 02/16 09:25