2016-08-17 4 views
0

에서 1 행에 2 개 개의 다른 값을 반환해야, 내가 2 개 테이블과 같은 쿼리가 :SQL 선택 MySQL의 2 개 테이블

SELECT t1.id, t1.desc_short, t2.body FROM table1 t1, table2 t2 WHERE t1.desc_short = t2.name AND t1.id = 100321654 

표 개체를 포함를, 표 2는 자신의 캐릭터 이름 (표 2, 표 3이 포함되어 있습니다. .., tableN은 언어 테이블)

내 문제는 t1에서 객체의 이름 인 'name'열이 있으므로 문자열에 대해 table2로 이동하고 'desc'열에도 t1이 있습니다. 그것은 객체에 대한 설명이며 table2에서도 찾을 수 있지만 같은 행은 아닙니다.

표 (개체)와 같은 것입니다 : 하나 개의 행을 반환 한 SQL 쿼리,

id  |  name  | body 
10000 | STR_DESC_SHORT1 | name of object 169461235 
10354 | STR_DESC_LONG1 | desc of object 169461235 

이 가능 이름과 하나의 내림차순을 잡으려고 :

id  |  desc_short  | desc_long 
169461235 | STR_DESC_SHORT1 | STR_DESC_LONG1 

표 2는 같은입니다 특정 객체?

편집 : 표 예제가 추가되었습니다. 열 이름을 혼란스럽게해서 유감스럽게 생각합니다. 따라서, 하나 개의 행을 반환 한 SELECT, 나는이 필요합니다 개체 이름이 동일

id  |   desc_short   |   desc_long 
169461235 | name of object 169461235 | desc of object 169461235 
+0

좀 더 이해하기 쉽도록 예제를 수정할 수 있습니까? 표 1의 예를 들어주세요. 표 2의 예에서 두 번째 행에 첫 번째 행에 다른 이름과 ID를 부여한다는 의미입니까? 이것이 맞으면 나는 그들이 어떻게 연관되는지 보지 못한다. – Nick

+0

이 문언은 모순 된 것처럼 보입니다. "table2의 문자열 이름은"_ 및 _ "로 표시됩니다. 'name'은 (는) 객체 이름입니다."_ – Uueerdo

+0

죄송합니다. 게시물을 업데이트했습니다. –

답변

1

처럼 사용할 수 "두 번,이 같은 :

SELECT t1.id, nameTbl.body AS `nameStr`, descTbl.body AS `descStr` 
FROM table1 AS t1 
INNER JOIN table2 AS nameTbl ON t1.DESC_SHORT = nameTbl.name 
INNER JOIN table2 AS descTbl ON t1.DESC_LONG = descTbl.name 
WHERE t1.id = 100321654 
; 
+0

그게 효과가 있습니다! 정말 고맙습니다 ! (t1.name이 더 이상 존재하지 않고 열 이름을 변경하지 않고 내 게시물을 편집했습니다.) –

+0

두 번째 테이블에서 아무것도 발견되지 않아도 레코드가 필요하기 때문에 INNER JOIN 대신 LEFT JOIN을 사용했습니다. –

0

경우 당신은 문자열의 당신의 "테이블에 가입해야합니다

SELECT t1.id, t1.name, t2.body 
FROM table1 t1, table2 t2 
WHERE t2.body like concat('%', t1.id, '%') 
OR t2.body like concat('%', t1.id) 
OR t2.body like concat(t1.id, '%') 
AND t1.id = 100321654 
+0

죄송합니다. 동일하지 않으므로 게시물에 더 많은 정보와 테이블 내용을 추가했습니다. –

+0

첫 번째 제안으로 답변을 업데이트했습니다 .. – scaisEdge

0

귀하의 예를 다음과 같이 좀 더 자세한 설명 필드 이름 가능한 경우 선택할 것입니다하지만 당신은 두 번에 테이블에 가입 할 수 있습니다 :

SELECT t1.id 
     ,t2name.body as DESC_SHORT 
     ,t2desc.body as DESC_LONG 
FROM table1 t1 
LEFT JOIN 
table2 t2name WHERE t1.DESC_SHORT = t2.name 
LEFT JOIN 
table2 t2desc WHERE t1.DESC_LONG = t2.name