2017-05-03 36 views
0

在我的前端應用程序中,我爲整個表提供了唯一的搜索字段。 我想知道是否有一種方法在SQL中創建兩個字段之間的OR條件,一個在父表中,另一個在INNER JOIN(子)表中。SQL:或者父項和子項之間的條件

由於一對多的關係 用戶(ID,姓名) - >地址(ID,姓名,USER_ID)

我用繩子小號搜索並且我想要找到名稱爲S的每個用戶或居住在城市名爲的所有用戶S

+0

'從用戶選擇*其中名稱=「S」或身份證件(從地址中選擇ID,其中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.Name是你想要搜索的領域,因爲缺少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用戶的信息。如果您希望尋找他們開始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查詢:

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」的城市的用戶標識符,並且如果您通過模式地址表包含用戶標識符,那麼沒有問題。 – hamzox

+1

這不是問題所在。這是你在你的子查詢中選擇的內容。 'ADD add.id from Address add where add.name ='S''將返回一個地址ID列表。 '或者user.id IN(ADDRESS_IDS_HERE)'。它應該是'SELECT add.user_id' –

相關問題