Hoje aprendi que SELECT f1,EXISTS(SELECT ...),f2
é válido no MySQL e, lendo do StackOverflow, aparentemente também no PostgreSQL e a EXISTS
parte é 0 quando o resultado da subconsulta está vazio e 1 quando o resultado não está. Aí comecei a pensar e testei algumas querys parecendo SELECT * WHERE column1 - column2
e até essa funcionou e é igual a column1 <> column2
. E eu até tentei WHERE (column1 > 0) - column2
e até isso funcionou. Este é o padrão SQL ou apenas o MySQL é acionado para lançar booleanos e inteiros com abandono selvagem? Ou talvez os booleanos nem existam no SQL e 0/1 os represente?
Início
/
user-1863
chx's questions
chx
Asked:
2016-06-19 04:18:04 +0800 CST
DETAIL: Key (proname, proargtypes, pronamespace)=(rand, , 2200) already exists.: CREATE OR REPLACE FUNCTION "rand"() RETURNS float AS
Como diabos isso é possível? Como pode CREATE OR REPLACE
falhar com já existe? Isso está em um contêiner docker, ambiente completamente intocado e é o único que o código é executado. Sim, pode ser executado repetidamente, mas é por isso que OR REPLACE
está lá. Eu não entendi. Aqui está o comando completo:
if (!$connection->query("SELECT COUNT(*) FROM pg_proc WHERE proname = 'rand'")->fetchField()) {
$connection->query('CREATE OR REPLACE FUNCTION "rand"() RETURNS float AS
\'SELECT random();\'
LANGUAGE \'sql\'');
}
chx
Asked:
2012-04-16 10:27:17 +0800 CST
Eu tenho SELECT field(foo,'this','that','bar','baz') FROM t WHERE f1 IN ('this','that','bar','baz')
Como posso evitar listar ('this','that','bar','baz')
duas vezes?