如何通过连接mysql中的两个表来选择特定的值范围?

时间:2013-03-23 05:03:29

标签: java mysql sqlanywhere

我有两个表,我必须根据查询

从两个表中选择值

我有两个表,例如tab1,tab2,每个表都有相同的列name,age,job,gender。在tab 2我有额外的专栏place

我必须从tab1和tab2中选择性别为男性的所有值

怎么做?

SELECT tab1.name,tab1.gender,tab1.age,tab2.place FROM tab1 INNER JOIN tab2 ON tab1.gender=mhdetail.gender where gender='male';

这是正确的吗?

3 个答案:

答案 0 :(得分:2)

您需要更加具体JOIN条件。如果您在两个表中都没有ID,但名称,性别,年龄的组合是唯一的,那么您可以这样做

SELECT t1.name,
       t1.gender,
       t1.age,
       t2.place 
  FROM tab1 t1 LEFT JOIN 
       tab2 t2 ON t1.gender = t2.gender AND
                  t1.name = t2.name AND
                  t1.age = t2.age    
 WHERE t1.gender='male';

这是 SQLFiddle

答案 1 :(得分:0)

你不是在寻找联盟。你想要一个Union

SELECT *
FROM MyTable1
WHERE Gender = 'Male'

UNION -- Or 'UNION ALL' if you want duplicates.

SELECT *
FROM MyTable2
WHERE Gender = 'Male'

如果您有2个表,并且想要来自2个表的信息,则会使用联接,但只有一个表包含性别:

SELECT *
FROM   MyTable1
JOIN   MyTable2 ON MyTable1.ID = MyTable1.ID
WHERE  MyTable1.Gender = 'Male'

答案 2 :(得分:0)

您的查询将导致许多重复的行。因为它会成为多对多的关系。如果这两个表通过主键和外键关系等任何方式相关,则使用这些键进行连接。否则请使用上面回答中公布的联盟。