在我的前端應用程序中,我爲整個表提供了唯一的搜索字段。 我想知道是否有一種方法在SQL中創建兩個字段之間的OR條件,一個在父表中,另一個在INNER JOIN(子)表中。SQL:或者父項和子項之間的條件
例
由於一對多的關係 用戶(ID,姓名) - >地址(ID,姓名,USER_ID)
我用繩子小號搜索並且我想要找到名稱爲S的每個用戶或居住在城市名爲的所有用戶S
在我的前端應用程序中,我爲整個表提供了唯一的搜索字段。 我想知道是否有一種方法在SQL中創建兩個字段之間的OR條件,一個在父表中,另一個在INNER JOIN(子)表中。SQL:或者父項和子項之間的條件
例
由於一對多的關係 用戶(ID,姓名) - >地址(ID,姓名,USER_ID)
我用繩子小號搜索並且我想要找到名稱爲S的每個用戶或居住在城市名爲的所有用戶S
select distinct user.*
from user
join address on user.id = address.user_id
where user.name = 'S' or address.city = 'S'
像這樣的東西應該適合您的需求。
我認爲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%');
實例SQL查詢:
SELECT * from USER user where user.name='S' or user.id IN(SELECT add.user_id from Address add where add.name='S')
這不起作用。您的子查詢返回地址ID,您的IN語句正在查找用戶ID。它可能會返回行,但我非常懷疑它是正確的。 –
IN語句正在尋找居住在具有「S」的城市的用戶標識符,並且如果您通過模式地址表包含用戶標識符,那麼沒有問題。 – hamzox
這不是問題所在。這是你在你的子查詢中選擇的內容。 'ADD add.id from Address add where add.name ='S''將返回一個地址ID列表。 '或者user.id IN(ADDRESS_IDS_HERE)'。它應該是'SELECT add.user_id' –
'從用戶選擇*其中名稱=「S」或身份證件(從地址中選擇ID,其中name ='S')' – Mike