我正在尝试使用where子句匹配表中多个字段中的空值, 例如
SELECT * FROM manage_users WHERE coalesce(surname, firstname, lastname, physical_address, postal_address, telephone_number, fax_number, cell_number, email,medical_aid_fund, medical_aid_number, allergies, emergency_contatct_person, emergency_contatct_number, id_number,gender, age_on_raceday, age_groups, shirt_size, type_of_club, roag_membership_number, csa_licence_number, provinical_running_licence_number, provinical_running_canoeing_number, tsa_licence_number, licence_number, number_of_comrade_marathon_completed, number_of_two_oceans_completed, number_of_duzi_completed, number_of_nonstop_duzi_completd,number_of_amashova_completed,
number_of_argus_completed, number_of_947_completed, number_of_midmar_mile_completed, make_of_running_shoes, make_of_road_bike, make_of_mtb, make_of_wetsuit) is NOT NULL and id='16'
我已经使用了coalesce,这是正确的方法。我没有使用这个得到预期的输出。任何人都可以帮助我得到结果。非常感谢。
答案 0 :(得分:3)
COALESCE
返回参数列表中的第一个非null值。因此,如果任何字段不为null,则查询将成功,并不要求所有字段都为非null。
您可以改为使用:
SELECT * FROM manage_users WHERE CONCAT(<list of columns>) is NOT NULL and id='16'
与大多数普通函数一样, CONCAT()
如果任何参数为NULL,则返回NULL。
要检查是否有空值,请添加:
AND LEAST(<list of string columns>) != ''
这应该只是字符串列;如果你在LEAST
中混合字符串和数字,它会将所有字符串转换为数字,任何不以数字开头的字符串都将转换为0
,因此它不会正常测试
答案 1 :(得分:1)
不接受null和空值的查询。它将选择列中有值的行。
Select * from manage_users where (surname and firstname and lastname and physical_address and postal_address) > ''