首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL中找到记录之间的公共值?

如何在SQL中找到记录之间的公共值?
EN

Stack Overflow用户
提问于 2017-10-01 12:01:02
回答 2查看 40关注 0票数 0

只是一个小问题,如果我有一个使用SQL的数据库:

代码语言:javascript
复制
Names: Max¦ John¦ May¦ Olivia

Numbers: 3, 7, 9¦ 1, 3, 4¦ 8, 5, 3¦ 5, 7, 1

是否有一种使用SQL检查“number”列的方法,以查看有多少人喜欢数字5,然后向用户显示他们的姓名(喜欢数字)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-01 12:21:28

首先,您有一个糟糕的数据库设计,但是如果您还想继续使用它,下面是如何实现它:

代码语言:javascript
复制
SELECT *
FROM YourTableName
WHERE Numbers LIKE '%5%';

结果:

代码语言:javascript
复制
+--------+---------+
|  Name  | Numbers |
+--------+---------+
| May    | 8, 5, 3 |
| Olivia | 5, 7, 1 |
+--------+---------+

但我再次承诺将这一设计改为:

代码语言:javascript
复制
DECLARE @Names TABLE ( ID INT IDENTITY(1,1), Name VARCHAR(30) );
DECLARE @Numbers TABLE ( Name INT, Number INT);

INSERT INTO @Names VALUES
('Max'),
('John'),
('May'),
('Olivia');
INSERT INTO @Numbers VALUES
(1, 3),
(1, 7),
(1, 9),
(2, 1),
(2, 3),
(2, 4),
(3, 8),
(3, 5),
(3, 3),
(4, 5),
(4, 7),
(4, 1);
/**/
SELECT N.Name, NM.Number
FROM @Names N INNER JOIN @Numbers NM ON N.ID = NM.Name
WHERE NM.Number = 5;

结果:

代码语言:javascript
复制
+--------+--------+
|  Name  | Number |
+--------+--------+
| May    |      5 |
| Olivia |      5 |
+--------+--------+

Demo1

Demo2

这里也是一个好的文章开始。

票数 1
EN

Stack Overflow用户

发布于 2017-10-01 12:04:34

以下是不将数字存储在字符串中的一些原因:

  • SQL具有很好的存储列表的数据结构。它被称为表,而不是字符串。
  • SQL具有(相对)糟糕的字符串处理能力。
  • 对字符串使用筛选器的查询通常不能使用索引。
  • 数字应该存储在适当的数据类型中--这是一个数字,而不是一个字符串。
  • 如果数字是另一个表中的If,则不能声明外键关系。

如果只想在字符串中找到"5“,可以使用like

代码语言:javascript
复制
where numbers like '%5%'

这可能不符合您的要求,因为它将匹配"5“到"15”。尽管这是可以修复的,但请返回并理解为什么不应该以这种方式存储数据。相反,您想要一张桌子,如:

代码语言:javascript
复制
Name    Number
Max        3
Max        7
Max        9
John       1
. . .
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46512175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档