此查询中有许多参数是用户可调的,而不是直接将它们编辑到sql语句中,我希望用户能够创建一些文本文件,使用{{运行查询1}},并以CSV格式获取结果。问题是,如果我在SQL语句中硬编码select函数,或者导入文本文件并使用select,我会得到不同的结果。
以下是整个SQL文件:
sqlite3 db.sqlite ".read query.sql" > result.csv
注意行
.headers off
.mode csv
CREATE TEMP TABLE IF NOT EXISTS zipcodes(zipcode text primary key);
.import zipcodes.txt zipcodes
CREATE TEMP TABLE IF NOT EXISTS dates(year text primary key);
.import dates.txt dates
CREATE TEMP TABLE IF NOT EXISTS history_codes(code text primary key);
.import history_codes.txt history_codes
.print "CALLSIGN,FIRST,LAST,ADDRESS,BOX,CITY,STATE,ZIP"
select
DISTINCT
COUNT(*)
from PUBACC_EN
JOIN PUBACC_HD ON PUBACC_EN.unique_system_identifier = PUBACC_HD.unique_system_identifier
JOIN PUBACC_AM ON PUBACC_EN.unique_system_identifier = PUBACC_AM.unique_system_identifier
JOIN PUBACC_AD ON PUBACC_EN.unique_system_identifier = PUBACC_AD.unique_system_identifier
JOIN PUBACC_HS ON PUBACC_EN.unique_system_identifier = PUBACC_HS.unique_system_identifier
WHERE (radio_service_code = "HA" or radio_service_code = "HV")
and PUBACC_AM.callsign <> ''
and PUBACC_HS.code LIKE ( select code from history_codes )
and ( street_address <> '' OR po_box <> '')
and applicant_type_code == "I"
and NOT previous_operator_class <> ''
and NOT previous_callsign <> ''
-- and grant_date like ( select year from dates )
and ( grant_date like "%2015%" or grant_date like "%2016%" )
and zip_code IN ( select zipcode from zipcodes )
ORDER BY PUBACC_AM.callsign ASC
;
DROP TABLE zipcodes;
DROP TABLE dates;
DROP TABLE history_codes;
日期表包含:
-- and grant_date like ( select year from dates )
and ( grant_date like "%2015%" or grant_date like "%2016%" )
因此它与硬编码行具有相同的项目。如果我使用注释交换语句,我会得到不同数量的记录。我只在这里显示了日期项目,但如果我对zipcodes或history_codes做同样的事情,我会得到不同的结果。
如何允许用户编辑参数的文本文件,然后将该信息导入查询?
谢谢。
答案 0 :(得分:1)
除非您使用像IN这样的运算符,否则子查询是标量子查询,即只使用第一个结果。
这意味着date like (select ...)
与date like '%2015%'
相同。
要访问所有日期,您必须使用dates
表添加联接:
...
JOIN dates ON grant_date LIKE dates.year
...