丢失了mySQL INNER Join查询

时间:2012-02-20 10:35:26

标签: mysql inner-join

好的,我正在玩这个查询。这是有道理的,但仍然没有得到我想要的确切结果。

SELECT DISTINCT b.friendID, b.isactive, c.*
            FROM memb_baseInfo a INNER JOIN memb_friends b ON
            a.mID = b.mID
            INNER JOIN memb_baseInfo c ON
            b.friendID = c.mID
            WHERE b.`isactive` = 0 OR b.`isactive` = 1
            AND a.mID = '21'

$ mid是动态变量。

我想要做的是在表memb_friends上找到与动态$ mid匹配的mID或friendID。从那里获取另一个表的信息。 memb_baseInfo。其中mID是各种外键。两个表都有mID作为匹配变量。但是在memb_friends中,对于memb_baseInfo表,expertID和mID基本上是一个。我的虚拟数据基本上是我的mID和5个假的数据,其中2个与我目前无关,还有3个与我建立了友谊。我的问题是这只是收集我的mID(21)有friendID的信息,但是如果有人和我结识并且数字是朋友表中的mID那么我就不知道那里的信息。我一直试图弄清楚如何做到这两点,但我失败了。希望我有道理,任何人都可以提供帮助>?

2 个答案:

答案 0 :(得分:1)

你找21岁的朋友,对吧?使用此:(未测试)

SELECT DISTINCT a.*
  FROM memb_baseInfo a
 WHERE a.mID IN (
  SELECT b.friendID FROM memb_baseInfo a INNER JOIN memb_friends b ON a.mID = b.mID
   WHERE (b.`isactive` = 0 OR b.`isactive` = 1)
     AND a.mID = '21')

答案 1 :(得分:0)

在等待回答的同时继续玩它之后我实际想出了

SELECT * FROM memb_friends a 
INNER JOIN memb_baseInfo b ON a.friendID = b.mID OR a.mID = b.mID
WHERE a.isactive = 1 AND b.mID NOT IN(".$mid.") AND (a.mID = '".$mid."' OR a.friendID = '".$mid."')

其中$ mid将在上面的原始查询中给出21。这将获得我所有的连接,并从我原来的问题中得到我目前需要的所有信息。