如何使用嵌套的INSERT SELECT,我可以使用前一个select中的字段

时间:2017-01-17 20:28:54

标签: mysql database

我有这样的陈述:

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;

enter image description here

在子查询中,我想选择包含CONCAT(Ulica,' ', Nr_domu, ' ', Nr_mieszk, ' ', Miejscowosc)的行,我正在选择' osoba' table,它与adres.adres表中的字符串相同。

不幸的是它返回错误代码:1242。子查询返回超过1行。

2 个答案:

答案 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;