2017-05-03 4 views
0

私のフロントエンドアプリケーションでは、テーブル全体に固有の検索フィールドがあります。 親テーブルとINNER JOIN(子)テーブルの2つのフィールドのOR条件をSQLで行う方法があるかどうかを知りたいと思います。私は、文字列Sで検索>アドレス(ID、名前、USER_ID)SQL:親フィールドと子フィールドの間の条件

- 多くの関係へのユーザー(ID、名前) 1つの所与の

そして、私はすべてのユーザーを見つけたいという名SまたはS

という名前の街に住んでいるすべてのユーザー
+0

'ユーザから選択*どこ名= 'S' またはIDで( Address from name = 'S') ' – Mike

答えて

0
select distinct user.* 
from user 
    join address on user.id = address.user_id 
where user.name = 'S' or address.city = 'S' 
1

あなたのニーズに合ったものを選んでください。

私は、が、Address.Cityの不足のために検索したいフィールドであると仮定しています。

SELECT User.* 
FROM User 
JOIN Address ON Address.User_ID = User.ID 
WHERE (User.Name LIKE '%S%' OR Address.Name LIKE '%S%'); 

これは、あなたの名前や都市Sを含んだユーザーのための情報を提供します。

SELECT User.* 
FROM User 
JOIN Address ON Address.User_ID = User.ID 
WHERE (User.Name LIKE 'S%' OR Address.Name LIKE 'S%'); 
0

例SQL QUERY:あなたは、彼らがSとを開始場所を検索することを好む場合は、以下を使用

SELECT * from USER user where user.name='S' or user.id IN(SELECT add.user_id from Address add where add.name='S') 
+0

これは動作しません。あなたのサブクエリはアドレスIDを返しており、INステートメントはユーザーIDを探しています。それは行を返すかもしれませんが、私はそれが正しいことを非常に疑う。 –

+0

INステートメントは "S"の都市に住んでいるユーザーIDを探しています。ユーザーIDを含むスキーマのアドレステーブルを参照すると問題はありません。 – hamzox

+1

問題はどこにありません。これは、サブクエリで選択しているものです。 'add add.id from Address add add.name = 'S''はアドレスIDのリストを返します。 'またはuser.id IN(ADDRESS_IDS_HERE)'となります。それは 'SELECT add.user_id'であるべきです –

関連する問題