2012-04-26 270 views
0
 **TableFruits**      **TableNames** 
    RecId RId  FruitId  Price   RId FruitId  Name 
    1  A1  Null   3$   A1  1  Mango 
    2  A2   2    4$   A2  2  Tomato 

由于FruitId下还有空在TableFruits我想从表名取像内部连接的内部连接?

Select a.RecId,a.RId,b.FruitId from TableFruits a INNER JOIN TableNames b on a.RId=b.RId 
  1. 我该如何申请在此SQL语句加入到包括从表2 FruitNames(我不能改变表的顺序)
+0

什么是你想要的输出? – Jatin 2012-04-26 06:13:11

+0

我想在RecId,RId,FruitId,Names等结果中使用类似的东西。 – 2012-04-26 06:16:05

+1

当一个表中存在“RID”时,它是否也存在于另一个表中?或者有不匹配? – 2012-04-26 06:18:22

回答

2
SELECT a.RecId 
    , a.RId 
    , COALESCE(a.FruitId, b.FruitId) AS FruitId 
    , b.Name 
FROM TableFruits a 
    JOIN TableNames b 
    ON b.RId = a.RId ; 

既然你CAN H在RId不匹配,你需要一个外连接。 LEFT,RIGHTFULL,取决于哪一侧可能出现不匹配。

MySQL没有FULL JOIN,所以你可以做这样的事情:

SELECT a.RecId 
    , a.RId 
    , COALESCE(a.FruitId, b.FruitId) AS FruitId 
    , b.Name 
FROM TableFruits a 
    LEFT JOIN TableNames b 
    ON b.RId = a.RId 

UNION ALL 

SELECT NULL 
    , NULL 
    , b.FruitId 
    , b.Name 
FROM TableFruits a 
    RIGHT JOIN TableNames b 
    ON b.RId = a.RId 
WHERE a.RId IS NULL ; 
+0

谢谢ypercube。这就像一个魅力! – 2012-04-26 08:27:14

2
Select a.RecId,a.RId,a.FruitId, b.Name 
from TableFruits a 
LEFT OUTER JOIN TableNames b on a.RId=b.RId 
+0

你可以通过在我的查询中应用内部连接来做到这一点吗?这只是一个例子。 – 2012-04-26 06:15:18

+0

@DamienJoe:查看ypercube的回答。 – 2012-04-26 06:49:08