在另一个select语句中选择两次

时间:2016-05-09 06:00:38

标签: mysql

我有以下表架构和数据

CREATE TABLE Customer
(
    First_Name char(50),
    Last_Name char(50),
    Address char(50),
    Age  int,
    City char(50),
    Birth_Country char(25),
    Live_Country char(25),
    Birth_Date datetime
);

insert into Customer (first_name, last_name, address, age, city, Birth_Country, Live_Country, birth_date) values('John', 'Doe', 'Xi-Fu Road', 29,  'Tokyo', 'Japan', 'Japan','1988-11-19') ;
insert into Customer (first_name, last_name, address, age, city, Birth_Country, Live_Country, birth_date) values('Mary', 'Fai', 'Xi-Fu Road', 30,'Tokyo', 'Japan', 'Japan','1987-04-14') ;
insert into Customer (first_name, last_name, address, age, city, Birth_Country, Live_Country, birth_date) values('Tim', 'Potter', 'Gan-xuiu Road', 30, 'NewYork', 'US','Germany', '1987-04-11') ;
insert into Customer (first_name, last_name, address, age, city, Birth_Country, Live_Country, birth_date) values('Lala', 'Hua','Gong-Fu Road',  31, 'Bei-Jing', 'PRC', 'US','1986-12-11') ;
insert into Customer (first_name, last_name, address, age, city, Birth_Country, Live_Country, birth_date) values('Marcia', 'Changhua', 'To-Fu Road', 41 ,'London', 'French', 'Japan','1976-01-04') ;

CREATE TABLE Country_Info
(
    ID int,
    Country char(50)        
);


insert into Country_Info(ID, Country) values(0, 'Japan') ;
insert into Country_Info(ID, Country) values(1, 'US') ;
insert into Country_Info(ID, Country) values(2, 'Germany') ;
insert into Country_Info(ID, Country) values(3, 'PRC') ;
insert into Country_Info(ID, Country) values(4, 'French') ;

我想知道live_country的ID和客户的birth_country。

我使用以下查询

select ID from Country_Info, (select Birth_Country as birth, Live_Country as live from Customer) as tmp_table where 
birth = Country_Info.Country ;

查询仅获取客户的birth_country的ID;

但我想获得birth_country和live_country的ID,并显示在两列中。

是否可以一次查询一次?

4 个答案:

答案 0 :(得分:0)

您的数据库结构未规范化。 您需要在表客户中存储birth_country和live_country的ID。如果需要,请使用join获取这些国家/地区的名称

答案 1 :(得分:0)

你可以在这个查询中使用连接,在连接条件下,你应该在" on子句"中使用正确的field_names;避免复制,纠正和快速的结果。

 select cu.first_name, ci.id as country_id, cu.Birth_Country, cu.Live_Country
 from
 Country_Info ci
 inner join Customer cu
 on ci.Country = cu.Birth_Country

在上面的查询中,我在ci.Country = cu.Birth_Country"上有条款",它将显示birth_Country的country_id。如果你想要live_country的id,只需在ci.Country = cu.Live_Country"

上更改条款"

答案 2 :(得分:0)

您可以使用<select name="Live_Country" id="Live_Country"> <option value="1">Japan</option> <option value="2">Germen</option> </select> 表格以create customer的形式插入 Birth_Country,Live_Country

Birth_Country,Live_Country 保存为ID而不是名称。 您的Birth_Country,Live_Country如下所示。您可以从Country_Info表中获取值。

//CFDictionarySetValue(sslOptions,kCFStreamSSLLevel,kCFStreamSocketSecurityLevelTLSv1); 

我猜您的表格结构错误,将Country_Info表格ID设为自动增量主键。 如果您遵循此结构,则无需在查询中使用任何加入来检索国家/地区名称,您可以按ID获取国家/地区名称。

答案 3 :(得分:0)

立即使用您的数据,试试这个

SELECT  C.first_name,C.last_name,
        Birth.ID as Birth_Country_ID,
        Live.ID as Live_Country_ID
FROM Customer as C
INNER JOIN Country_Info as Birth ON C.Birth_Country = Birth.Country
INNER JOIN Country_Info as Live ON C.Live_Country = Live.Country

http://sqlfiddle.com/#!9/c4678e/2 然后添加WHERE C.first_name = 'somename'以查找特定客户。

但我建议你在你的客户表中添加一个auto_increment id。 而不是将国家/地区名称保存在客户表中,而是保存国家/地区的ID。