如果我有像
这样的代码$vals = "50,60,40";
IN SQL
"SELECT * FROM TABLE WHERE col IN( $vals )"
如果我的值为50,并且我在SQL中包含“50,40,60”
,则为“否”我如何选择
我指的是IN语法的反转
如果我在sql中有表包含像
这样的值Firstname | Lastname | Age | Hobbies
Ahmed | Ali | 50 | run,swim
Mohammed | Ahmed | 30 | run
如果我想要谁可以在爱好中游泳
答案 0 :(得分:6)
我的意思是IN语法的反转
您可以使用
NOT IN
运算符如果你有一个好的表结构。
你应该为Hobbies
创建一个表,然后在你的person
表中添加一个续约,因为现在完成这个任务的唯一方法是使用一个包含大量{{1}的丑陋SQL条件。
答案 1 :(得分:2)
我建议您更改架构,将值存储在一个单独的表中,并将FK存储到原始列。
People
ID - PK
FirstName
LastName
Hobbies
ID -- PK
Person_ID -- FK to People
Hobby -- store your comma-separated values here
然后你可以做
select People.ID, People.FirstName, People.LastName
from People
inner join Hobbies on People.ID = Hobbies.Person_ID
where Hobbies.Hobby = 'Swimming'
一个更好的结构可能有3个表,让你可以独立于人保持一系列爱好,只需保持每个人和他们的爱好之间的关系。
People
ID
FirstName
LastName
Hobbies
ID
Hobby
PeopleHobbies
ID
Person_ID
Hobby_ID
与往常一样,考虑您的查询需求并在表上创建合适的索引以允许快速查找和连接。
答案 2 :(得分:2)
检查FIND_IN_SET()功能:
"SELECT * FROM TABLE WHERE FIND_IN_SET('swim', Hobbies) > 0"