반응형
SQL - 배수 값 필드에서 선택
Teampass를 사용하고 있습니다.테이블 스키마의 최소화된 예를 다음에 나타냅니다.
Teampass_Roles_Title:
+----+----------------------+
| id | title |
+----+----------------------+
| 1 | Title 1 |
| 2 | Title 2 |
| 3 | Title 3 |
| 4 | Title 4 |
| 5 | Title 5 |
| 6 | Title 6 |
...
+----+----------------------+
및 Teampass_Users
+------------+------------------------------------------------------------+
| login | fonction_id |
+------------+------------------------------------------------------------+
| AAA | |
| BBB | |
| CCC | 12;21; |
| DDD | 3;4;5;6;7;8;9;14;15; |
| EEE | 3;7; |
| FFF | 3;7; |
| GGG | 3;4;5;6;7;8;9;14;15;21; |
| HHH | 3;4;5;6;7;8;9;14;15;21; |
...
+------------+------------------------------------------------------------+
의 숫자fonction_id
테이블의 ID입니다.Teampass_Roles_Title
중간 테이블을 사용하는 대신 이 모델을 선택했습니다.예를 들어, 액세스 할 수 있는 모든 유저의 리스트가 있는지 어떤지는 알 수 없습니다.Title 6
+------------+------------------------------------------------------------+
| login | fonction_id |
+------------+------------------------------------------------------------+
| DDD | 3;4;5;6;7;8;9;14;15; |
| GGG | 3;4;5;6;7;8;9;14;15;21; |
| HHH | 3;4;5;6;7;8;9;14;15;21; |
...
+------------+------------------------------------------------------------+
이것은 매우 나쁜 데이터 모델입니다.때때로, 우리는 다른 사람들의 정말 나쁜 결정들에 사로잡힌다.사용하고 싶은 것을 사용할 수 있습니다.find_in_set()
그리고.replace()
:
where find_in_set(6, replace(function_id, ';', ',')) > 0
아무리 좋게 말해도 데이터베이스 모델은 좋지 않다.필요한 작업을 수행할 수 있는 쿼리는 다음과 같습니다.
select
u.*
from Teampass_Roles_Title t
join Teampass_Users u on u.fonction_id like concat('', t.id, ';%')
or u.fonction_id like concat('%;', t.id, ';%')
where t.title = 'Title 6'
다만, 자원 사용의 관점에서는 최적인 것은 아닙니다.데이터베이스 모델을 수정하지 않는 한 다른 방법이 없습니다.
오퍼레이터와 함께LIKE
:
select * from Teampass_Users
where
concat(';', fonction_id, ';')
like
concat('%;', (select id from Teampass_Roles_Title where title = 'Title 6'), ';%')
데모를 참조해 주세요.
결과:
| login | fonction_id |
| ----- | ----------------------- |
| DDD | 3;4;5;6;7;8;9;14;15; |
| GGG | 3;4;5;6;7;8;9;14;15;21; |
| HHH | 3;4;5;6;7;8;9;14;15;21; |
또, 이 명령어를 변경할 수도 있습니다.LIKE
이것처럼.
where function_id like '%;%6%;%' or function_id like '6%;%'
언급URL : https://stackoverflow.com/questions/60776304/sql-selecting-from-a-multiples-values-field
반응형
'programing' 카테고리의 다른 글
특정 색인 뒤에 있는 목록에서 모든 요소 제거 (0) | 2022.11.06 |
---|---|
Linux에서 현재 사용되는 MySQL 구성 파일의 위치를 확인하는 방법 (0) | 2022.11.06 |
목록을 문자열로 변환하는 방법 (0) | 2022.11.06 |
TypeError: 인수 값을 여러 개 가져왔습니다. (0) | 2022.10.27 |
Python이 튜플에 항목 추가 (0) | 2022.10.27 |