只是一个小问题,如果我有一个使用SQL的数据库:
Names: Max¦ John¦ May¦ Olivia
Numbers: 3, 7, 9¦ 1, 3, 4¦ 8, 5, 3¦ 5, 7, 1
有没有办法使用SQL检查“数字”列,看看有多少人喜欢数字5,然后向用户显示他们的姓名,谁更喜欢这个数字。
答案 0 :(得分:1)
好吧,首先你有一个糟糕的数据库设计,但如果你还想继续前进,那么这里是怎么做的:
SELECT *
FROM YourTableName
WHERE Numbers LIKE '%5%';
结果:
+--------+---------+
| Name | Numbers |
+--------+---------+
| May | 8, 5, 3 |
| Olivia | 5, 7, 1 |
+--------+---------+
但我建议将设计更改为:
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;
结果:
+--------+--------+
| Name | Number |
+--------+--------+
| May | 5 |
| Olivia | 5 |
+--------+--------+
<强> Demo1 强>
<强> Demo2 强>
这也是一个很好的 article 。
答案 1 :(得分:0)
以下是不将数字存储在字符串中的一些原因:
如果你想找到&#34; 5&#34;在字符串中,您可以使用like
:
where numbers like '%5%'
这可能不会做你想要的,因为它会匹配&#34; 5&#34;到&#34; 15&#34;。虽然这可以修复,但请回过头来理解为什么不应该以这种方式存储数据。相反,你想要一个像这样的表:
Name Number
Max 3
Max 7
Max 9
John 1
. . .