하나의 필드에서 다른 행의 값을 검색해야하는 두 개의 테이블이 있습니다. 행은 연결 문자열입니다. 이런 식으로 뭔가 :concat과 같은 SQL이 특정 값을 선택하지 않습니다.
표 :
|id|Name |Itemsid |
|1 |John |1 |
|2 |Hans |4, 22, 23|
|3 |Chris|2, 4, |
|4 |Jorn |4, 22, 23|
|5 |Claus|1, 4, 23 |
|6 |Marco|22, 4 |
표 2 :
|id |item |
|1 |Mobile |
|2 |Creditcard |
|3 |Wallet |
|4 |Car |
|22 |House |
|23 |Boat |
예상 결과
4|Jorn|Car
4|Jorn|House
4|Jorn|Boat
나는
SELECT *
FROM Table1
INNER JOIN Table2 ON Table1.itemsid LIKE CONCAT ('%', Table2.id, '%')
WHERE Table1.name = Jorn
시도
4|Jorn|Car
4|Jorn|Creditcard
4|Jorn|Wallet
4|Jorn|House
4|Jorn|Boat
결과가
따라서 나는 regexp
그래서 내부는 것 가입 시도 :
SELECT *
FROM Table1
INNER JOIN Table2 ON Table1.itemsid REGEXP CONCAT ('(,|\s|^)', Table2.id, '(,|\s|$)')
WHERE Table1.name = Jorn
그래서 문제가 like concat
를 사용
4|Jorn|Car
의 결과로, 그것은 '아무튼이다 특정 값을 선택하고 ID가 22이면 2를 선택하십시오.
regexp
의 문제는 첫 번째 ID 만 선택하고 목록을 검토하지 않는다는 것입니다.
그래서 예상 된 결과를 대신 제공 할 쿼리를 찾고 있습니다.
데이터베이스 디자인이 좋지 않습니다. 다른 테이블에서 Itemsid 필드를 움직여야하고, 테이블 1과 2를 연결 한 후에야합니다. – faster2b