2017-09-13 64 views
0

我想要做什麼看起來像一個簡單的查詢..我有一個查詢工作正常,直到我嘗試添加一個子查詢select子句。我試圖通過查詢第二個表格來添加一列,並且列出了第一個表格的日期。我不知道一個聯盟是否會更好。如果你看看我的第一個示例,它會返回我的第二個表中的每條記錄,而不是使用外部select語句的日期範圍。從主查詢值與日期時間比較的MySQL子查詢

SELECT `sales`.`date` as 'newdate', `sales`.`material`, 
`customer_logs`.`name`, `sales`.`billingqty` , 
(select count(*) from iis_logs where datetime > (select 
Date_add(date_format(newdate, "%Y-%m-%d 00:00:00"), interval - 1 day)) 
and datetime < date_format(newdate, '%Y-%m-%d 00:00:00' and url like 
CONCAT('%',material,'%') limit 1) as tr 
FROM `sales` 
JOIN `customer_logs` ON `customer_logs`.`customer_number` = 
`sales`.`soldtopt` 
WHERE `date` >= '2017-09-01' 
AND `date` <= '2017-09-30' 
ORDER BY `date` DESC 
LIMIT 10; 

如果我只需要輸入字符串作爲像這樣的日期返回內第二:

SELECT `sales`.`date` as 'newdate', `sales`.`material`, 
`customer_logs`.`name`, `sales`.`billingqty` , 
(select count(*) from iis_logs where datetime > '2017-09-01 00:00:00' 
and datetime < '2017-09-03 00:00:00' and url like 
CONCAT('%',material,'%') limit 1) as tr 
FROM `sales` 
JOIN `customer_logs` ON `customer_logs`.`customer_number` = 
`sales`.`soldtopt` 
WHERE `date` >= '2017-09-01' 
AND `date` <= '2017-09-30' 
ORDER BY `date` DESC 
LIMIT 10; 

它沒有采取newdate我想在SELECT語句中得到的價值,而不是它正在返回iis_logs表中的每一行...

回答

0

這看起來像是一個完美的加入候選人。 FWIW,mysql查詢優化器通常對連接子查詢的反應更好。

+0

我也嘗試過一個連接,每當我使用select而不是文字日期的結果,它不再工作。我在使用select的結果作爲比較之間的日期時做錯了什麼? –

+0

你可以發佈你使用連接的代碼嗎? – pucky124

+0

select date_format('s'.'date','%Y-%m-%d 00:00:59')as'end', date_format('s'.'date','%Y-%m - %d 00:00:00')as'start','s'.'material', 's'.billingqty',iis_logs.datetime from sales s left join iis_logs on iis_logs.datetime between date_format ('s'.'date','%Y-%m-%d 00:00:00')和date_format('s'.'date','%Y-%m-%d 23:59: 59') WHERE'date'> ='2017-06-05' AND'date' <='2017-06-30' LIMIT 5; –