mysql内连接需要另一种类型的连接

时间:2012-07-23 11:22:58

标签: mysql

[TABLE1]

 +----------+-------------------+-------------+
 | USERNAME | POST              | FRUIT       |
 +----------+-------------------+-------------+
 | Bob      | 'Hi There'        | APPLE       |
 | Jack     | 'Hello'           | ORANGE      |
 | Bob      | 'Today is Monday' | APPLE       |    
 | Tony     | 'That is ok'      | PEAR        |
 +----------+-------------------+-------------+

 [TABLE2]

 +----------+-----------+
 | USERNAME | FOLLOWING |
 +----------+-----------+
 | Mike     | Jack      |
 | Jack     | Bob       |
 | Bob      | Jack      |
 | Jack     | Mike      |
 +----------+-----------+

 [TABLE3]

 +----------+----------- +
 | USERNAME | LIKESFRUIT |
 +----------+----------- +
 | Mike     | APPLE      |
 | Jack     | ORANGE     |
 | Bob      | BERRY      |
 | Jack     | PEAR       |
 +----------+------------+

我正在使用以下查询。它显示了TABLE1中的所有记录,如果jack是跟在TABLE2中的用户或表1中用户名中的jack。

 SELECT t1.* 
 FROM TABLE1 t1 
 INNER JOIN table2 t2 
 ON t1.username = t2.following 
 AND (t2.username = 'jack' OR t1.username = 'jack');

现在我想这样做并显示TABLE1中的记录,如果表3中的插孔LIKESFRUIT。

3 个答案:

答案 0 :(得分:0)

 SELECT t1.* 
 FROM TABLE1 t1 
 INNER JOIN table2 t2 
 ON t1.username = t2.following 
left join tablet3 t3 on t3.username = t1.username
 AND (t2.username = 'jack' OR t1.username = 'jack')
AND (t3.username = 'jack' and t3.LIKESFRUIT <> '' and t3.LIKESFRUIT is not null)
;

虽然我不确定“表1中的节目记录”是什么意思

答案 1 :(得分:0)

试试这个

SELECT t1.* 
 FROM TABLE1 t1 
 INNER JOIN table2 t2 
 ON t1.username = t2.following 
 AND (t2.username = 'jack' OR t1.username = 'jack')
 and exists(select * from TABLE3 t3 where t3.username=t1.username)

答案 2 :(得分:0)

SELECT
    username, post, fruit
FROM
    TABLE1 t1
INNER JOIN
    TABLE2 t2
ON
    t1.username = t2.username
AND t1.username = t2.follwing
INNER JOIN
    TABLE3 t3
ON
    t3.LIKESFRUIT = t1.fruit
WHERE
    t1.username = 'jack';