![](/img/trans.png)
[英]MYSQL - selecting data from one table based on the content of the other one
[英]mysql selecting data from one table based on data from another table
我有兩個mysql表
表格1:
ID data status
1 data1 1
2 data2 1
3 data3 0
4 data4 1
表2:
ID lastLoginDate specialID
1 2018-09-10 abc
2 2018-03-16 xyz
3 2018-02-20 foo
4 2018-06-18 bar
兩個表之間的公共數據是ID列。
我有一個要在table2中找到的特定值的列表,但我也想包含僅包含來自狀態為1且來自Table2的lastLoginDate小於'2018-03-17'的Table1數據的結果
這是到目前為止我嘗試使用的代碼,但是它不起作用:
SELECT Table1.data, Table2.ID, Table2.specialID
FROM Table1, Table2
WHERE Table2.SpecialID IN ('acb, foo') OR Table2.ID IN
(SELECT Table2.ID
FROM Table1, Table2
WHERE Table1.ID = Table2.ID
AND Table1.status = '1'
AND Table2.lastLoginDate < '2018-03-17'
)";
預期結果:
data ID specialID
data1 1 abc
data2 2 xyz
結果中不應包含ID“ 3”,因為即使在“ IN”列表中包含了特殊ID,表1中的狀態也為“ 0”。
另外,結果中不應包含ID“ 4”,因為在“ IN”列表中未包含specialID,並且“ lastLoginDate”大於“ 2018-03-17”。
同樣,有2個總體條件:1.必須在“ IN”列表中(僅當狀態為“ 1”時)2.需要在lastLoginDate之內(如果出現在“ IN”列表中,則應覆蓋此條件)條件,但是僅當狀態為“ 1”時)
我不確定是否需要將其分為兩個查詢才能正常工作。 希望有人可以幫助我解決這個問題。
如果您不希望在入列表中執行以下操作,那么最后一次特定的登錄將需要這樣的內容
select t1.data, t2.id, t2.specialID
from table1 t1
inner join table2 t2
on t1.id = t2.id
where t1.status = 1
and (t2.specialID in('abc','foo') or t2.lastloginDate <'2018-03-17')
我認為您的操作過於復雜,按ID進行簡單匹配應刪除沒有按ID進行匹配的任何結果(與進行內部聯接相同),對於其余條件,您可以將其添加到where子句中:
Select t1.data, t1.id, t2.specialID
from Table1 as T1, Table2 as T2
where t1.id = t2.id
and t1.status = 1
and t2.specialId in ('abc','foo')
and t2.login_date < '2018-03-17' ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.