簡體   English   中英

MySQL從另一個表中的數據中選擇數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM