MySQL - объединение двух таблиц с одним и тем же значением столбца и сравнение начальной и конечной даты - PullRequest
0 голосов
/ 26 сентября 2018

Привет. Я пытаюсь объединить две таблицы с одинаковым значением столбца, равным t1.Bid и t2.id. Затем, когда они объединяются, я хотел отобразить все адреса, статус = активный, адрес совпадает с адресомBid = 2001, конфликт между начальным и конечным диапазоном Bid = "2001".Я думаю, что есть проблема в моем запросе, я новичок, поэтому любой совет будет очень признателен, спасибо.

tbl Адрес:

id (VARCHAR(255))           
Address (LONGTEXT)   
startdate (LONGTEXT)   
enddate   (LONGTEXT) 
Bid   (LONGTEXT) 

tblbook:

id (VARCHAR(255))           
STATUS (LONGTEXT)   


tblAddress

id      Address        startdate      enddate                 Bid
x12es1  Place1       2018-08-27       2018-08-30               2001
x12fs2  Place1       2018-08-28       2018-08-30               2002
x1sd13  Place1       2018-08-27       2018-09-29              2003 
x12f14  Place4       2018-09-17       2018-09-18               2004


tblbook

id        Status
2001      Active
2002      Active
2003      Active
2004      Active

My output doesnt display anything

Bid         id           Status            startdate        enddate     Address

Desired Output
will only display those who has a conflict with bid 2001 start date and endate

Bid           id            Status                      startdate                enddate          Address
2002          2002            Active                      2018-08-28          2018-08-30         Place1
2003          2003            Active                      2018-08-27           2018-09-29        Place1    

Query

SELECT t2.Bid,t1.id,t1.Status,t2.startdate,t2.endddate,t2.Address
 FROM tblbook t1  INNER JOIN  tblAddress t2
ON t1.id =t2.Bid
WHEREt1.Status = 'Active' AND   
@check_period_start BETWEEN STR_TO_DATE(t2.startdate,'%Y-%m-%d')AND STR_TO_DATE(t2.enddate,'%Y-%m-%d') 
  AND @check_period_end BETWEEN STR_TO_DATE(t2.startdate,'%Y-%m-%d')AND STR_TO_DATE(t2.enddate,'%Y-%m-%d')  

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Попробуйте это:

select * from tblAddress t
where exists(select 1 from tblbook
             where id = t.bid and status = 'Active')
and exists(select 1 from tblAddress
           where bid = 2001 and
           t.startdate < enddate and
           t.enddate > startdate)
and bid <> 2001

У вас должен быть правильный тип данных в ваших столбцах дат!Я имею в виду, это должно быть date.

Демо

0 голосов
/ 26 сентября 2018

Вы должны построить правильную дату также для @check_period_start и @ check_period_end

SELECT t2.Bid,t1.id,t1.Status,t2.startdate,t2.endddate,t2.Address
FROM tblbook t1  
INNER JOIN  tblAddress t2 ON t1.id =t2.Bid
WHEREt1.Status = 'Active' 
AND str_to_date(@check_period_start, '%Y-%m-%d') 
       BETWEEN STR_TO_DATE(t2.startdate,'%Y-%m-%d')
            AND STR_TO_DATE(t2.enddate,'%Y-%m-%d') 
AND str_to_date(@check_period_end,, '%Y-%m-%d')  
       BETWEEN STR_TO_DATE(t2.startdate,'%Y-%m-%d')
            AND STR_TO_DATE(t2.enddate,'%Y-%m-%d')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...