2016-08-17 22 views
0

から2つの異なる値を返す必要があり、私は2つのテーブルを持っているなどの問合せ:SQLを選択1行に2つのテーブルのMySQLでは

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

table1にオブジェクトが含まれている、表2は、その文字列名(表2、表3が含まれています。 ..、tableNは言語表です)

私の問題は、t1ではオブジェクトの名前である列 'name'があるので、その文字列のtable2に行きます。また、t1には 'desc'という列があります。これはオブジェクトの説明であり、table2でも同じ行ではありません。

TABLE1(オブジェクト)のようである:

id  |  desc_short  | desc_long 
169461235 | STR_DESC_SHORT1 | STR_DESC_LONG1 

表2のようなものです:

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

は、それがいずれかの名前とDESCをキャッチするために、一列のみを返す1つのSQLクエリでは、可能です特定のオブジェクト?

EDIT:表の例が追加されました。カラム名が混乱して申し訳ありません。だから、1行を返す1 SELECTで、私が必要:オブジェクト名が同じである

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

あなたの例を変更して少し意味をなさないようにしてください。表1の例を挙げてください。表2の例では、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

2番目の表に何も見つからなくてもレコードが必要なので、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 
関連する問題