你好,我想使用别名结果作为SQL查询中的where子句。 以下是我的SQL查询。
SELECT SQL_CALC_FOUND_ROWS
`id`,
`number`,
`ref_no`,
CONCAT(" cosid LIKE '%",REPLACE(abc_cosing, ',',"%' OR cosid LIKE '%"),"%'") AS TEST,
(SELECT COUNT(id)
FROM `tbl_data_pub`
WHERE TEST ) AS TOTALREC FROM `tbl_data_main` as aa LEFT JOIN tbl_ref_table as bb on aa.id=bb.abc_id WHERE ref_no='12345'
我正在将TEST的值表示为“ 12345%”或cosid LIKE'%32837%'或cosi _...”,我想在where子句中对此赞一下。但是我该怎么办?
答案 0 :(得分:1)
尝试一下:
select * from
(
SELECT SQL_CALC_FOUND_ROWS
`ing_id`,
`ing_cas_no`,
`ing_cosing_ref_no`,
REPLACE(aig_addi_all_cosing, ',',"%' OR usf_eu_cosing_id LIKE '%") AS TEST,
(SELECT COUNT(usf_id)
FROM `tbl_USFDA_published`
WHERE (usf_eu_cosing_id LIKE TEST)) AS USFDAREG
FROM `tbl_ingredients` as aa
LEFT JOIN tbl_ing_addi_cosing_ref as bb on aa.ing_id=bb.aig_ing_id
WHERE ing_cosing_ref_no='38617'
)
where TEST like '%xxx%'
答案 1 :(得分:0)
您可以通过使用CTE获得结果。 “ Where”子句不允许使用别名。在下面的查询中尝试此操作将有所帮助。
deleteFromList(forDeletion, myList) {
myList = myList.filter(item => item !== forDeletion);
}
答案 2 :(得分:0)
MySQL扩展了having
子句的使用,使其在非聚合查询中的行为类似于where
。您可以使用:
SELECT SQL_CALC_FOUND_ROWS ing_id, ing_cas_no, ing_cosing_ref_no,
REPLACE(aig_addi_all_cosing, ',',"%' OR usf_eu_cosing_id LIKE '%") AS TEST,
(SELECT COUNT(usf_id)
FROM `tbl_USFDA_published`
WHERE (usf_eu_cosing_id LIKE TEST)) AS USFDAREG
FROM tbl_ingredients i LEFT JOIN
tbl_ing_addi_cosing_ref acr
ON i.ing_id = acr.aig_ing_id
WHERE ing_cosing_ref_no = 38617
HAVING test LIKE '%AAA%';
MySQL具有此扩展的充分理由。有两个原因是FROM
子句中的视图不允许子查询。而且,MySQL倾向于实现子查询-这增加了额外的开销-并且避免了这种开销。
其他一些注意事项:
ing_cosing_ref_no
是一个数字。将值与 number 而不是字符串进行比较。