我有这样的陈述:
select Imie as imie, Nazwisko as nazwisko, null, (SELECT id_adresu as adres from united_warehouse.adres
where adres= (SELECT CONCAT(Ulica,' ', Nr_domu, ' ', Nr_mieszk, ' ', Miejscowosc) FROM Anna_database.osoba where Imie=imie)) as adres,
Kod_poczt as kod_poczt, Kraj as id_kraju, Nr_tel as nr_tel from Anna_database.osoba;
在子查询中,我想选择包含CONCAT(Ulica,' ', Nr_domu, ' ', Nr_mieszk, ' ', Miejscowosc)
的行,我正在选择' osoba' table,它与adres.adres表中的字符串相同。
不幸的是它返回错误代码:1242。子查询返回超过1行。
答案 0 :(得分:1)
错误说你为内部选择获得了更多的行,所以你可以使用限制1来获得一个结果
select
Imie as imie
, Nazwisko as nazwisko
, null
, (SELECT id_adresu as adres
from united_warehouse.adres
where adres = ( SELECT CONCAT(Ulica,' ', Nr_domu, ' ', Nr_mieszk, ' ', Miejscowosc)
FROM Anna_database.osoba
where Imie=imie
limit 1) ) as adres
, Kod_poczt as kod_poczt
, Kraj as id_kraju
, Nr_tel as nr_tel
from Anna_database.osoba;
答案 1 :(得分:1)
您的select语句可能会返回多个值。这完全取决于您在查询的最终结果中所需的内容。
案例1
如果您希望子查询只返回一行,则可以执行类似
的操作select Imie as imie, Nazwisko as nazwisko, null, (SELECT id_adresu as adres from united_warehouse.adres
where adres= (SELECT TOP(1) CONCAT(Ulica,' ', Nr_domu, ' ', Nr_mieszk, ' ', Miejscowosc) FROM Anna_database.osoba where Imie=imie)) as adres,
Kod_poczt as kod_poczt, Kraj as id_kraju, Nr_tel as nr_tel from Anna_database.osoba;
案例-2
您可以执行类似
的操作select Imie as imie, Nazwisko as nazwisko, null, (SELECT id_adresu as adres from united_warehouse.adres
where adres in (SELECT CONCAT(Ulica,' ', Nr_domu, ' ', Nr_mieszk, ' ', Miejscowosc) FROM Anna_database.osoba where Imie=imie)) as adres,
Kod_poczt as kod_poczt, Kraj as id_kraju, Nr_tel as nr_tel from Anna_database.osoba;