Estou usando o Postgresql para consultar dados.
O que fiz como abaixo:
Tabela 1:
#id #zone_id #name #timestamp_create
1 1 Alex 2016-08-10 11:00:11.07+00
2 1 James 2016-08-10 11:30:11.07+00
3 1 Mary 2016-08-10 11:45:11.07+00
4 1 Ken 2016-08-10 12:15:11.07+00
5 1 Aston 2016-08-10 12:45:11.07+00
6 2 Tom 2016-08-11 11:28:11.07+00
7 2 Edward 2016-08-11 11:30:11.07+00
Mesa 2:
#id #zone_id #code #timestamp_start #timestamp_end
1 1 A 2016-08-10 10:50:11.07+00 2016-08-10 11:15:11.07+00
2 1 B 2016-08-10 11:16:11.07+00 2016-08-10 11:50:11.07+00
3 2 E 2016-08-11 10:30:11.07+00 2016-08-11 10:30:11.07+00
Minha consulta:
SELECT t1.zone_id, t1.name, t2.code, t1.timestamp_create
FROM table1 as t1 INNER JOIN table2 as t2 ON t1.zone_id = t2.zone_id
WHERE t1.timestamp_create BETWEEN t2.timestamp_start AND t2.timestamp_end
Resultado:
#zone_id #name #code #timestamp_create
1 Alex A 2016-08-10 11:00:11.07+00
1 James B 2016-08-10 11:30:11.07+00
1 Mary B 2016-08-10 11:45:11.07+00
Como posso alcançar o resultado abaixo:
#zone_id #name #code #timestamp_create
1 Alex A 2016-08-10 11:00:11.07+00
1 James B 2016-08-10 11:30:11.07+00
1 Mary B 2016-08-10 11:45:11.07+00
1 Ken 2016-08-10 12:15:11.07+00
1 Aston 2016-08-10 12:45:11.07+00
Eu também tentei usar o LEFT OUTER JOIN, mas ainda não funcionou.
Qualquer sugestão é apreciada.
Simplesmente mudar para left join
não funcionará porque você tem uma condição em seu where
que envolve as colunas da tabela certa. Para as linhas que não correspondem, essas colunas conterão null
, portanto, não atenderão à condição.
Para alcançar o que deseja, você deve mudar left join
e mover essa condição para a on
cláusula
SELECT t1.zone_id,
t1.name,
t2.code,
t1.timestamp_create
FROM table1 as t1
LEFT JOIN
table2 as t2
ON t1.zone_id = t2.zone_id AND
t1.timestamp_create BETWEEN t2.timestamp_start AND t2.timestamp_end
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras