2013-08-19 20 views
1

結果我有一個數據庫2個表:組合來自2個不同的SELECT請求(邏輯與)

$ SELECT * from image 
+----------+------+-----+ 
| image_id | good | bad | 
+----------+------+-----+ 
|  1 | 2 | 0 | 
|  2 | 1 | 0 | 
|  3 | 0 | 0 | 
|  4 | 1 | 0 | 

$ SELECT * from image_tag_map 
+----------+--------+-------+ 
| image_id | tag_id | score | 
+----------+--------+-------+ 
|  1 |  1 | 255 | 
|  2 |  1 | 255 | 
|  3 |  1 | 255 | 
|  4 |  2 | 255 | 

SELECT * FROM image_tag_map WHERE tag_id=$tagID and score>=5; 
result : 1, 2, 3 (image_id) 

SELECT * FROM image WHERE good!=0 ORDER BY good DESC; 
result : 1, 2, 4 (image_id) 

我想有1,2作爲一個結果。 (所以這兩個命令之間的混合) 這裏「image_id」在兩個地方。 我INNER JOIN嘗試等,但我不能找到一些作品......

回答

0

除了使用JOIN,你也可以使用EXISTS

SELECT a.* 
FROM image a 
WHERE a.good <> 0 AND 
     EXISTS 
     (
      SELECT 1 
      FROM image_tag_map b 
      WHERE a.image_id = b.image_id AND 
        tag_id = $tagID AND 
        score >= 5 
     ) 
ORDER BY a.good DESC 
0

JOIN兩張表:

SELECT * 
FROM image AS i 
INNER JOIN image_tag_map AS m ON i.image_id = m.image_id 
WHERE m.tag_id=$tagID and m.score>=5 
    AND i.good != 0 
ORDER BY i.good DESC; 
0

JOIN應該工作

SELECT * FROM image_tag_map itm 
JOIN image i ON i.image_id = itm.image_id 
WHERE itm.tag_id=$tagID 
AND itm.score>=5 
AND i.good!=0 
GROUP BY i.image_id 
0

你試試這個?

SELECT distinct itm.image_id 
FROM image_tag_map itm join 
    image i 
    on itm.image_id = i.image_id 
WHERE item.tag_id=$tagID and item.score>=5 and i.good <> 0; 
0

嘗試

SELECT m.* FROM image_tag_map m 
    inner join image i on m.image_id = i.id 
    WHERE tag_id=$tagID and score>=5 and i.good !=0 
0

你只需要標識?有幾種方法?

SELECT image_id FROM image 
WHERE good <> 0 
AND image_id IN (
    SELECT image_id FROM image_tag_map 
    WHERE tag_id = ? AND score >= 5 
) 

SELECT image_id FROM image 
WHERE good <> 0 
AND EXISTS (
    SELECT image_id FROM image_tag_map 
    WHERE image_tag_map.image_id = image.image_id 
    AND tag_id = ? AND score >= 5 
) 

使用一個INNER JOIN也應努力:

SELECT image_id FROM image i 
INNER JOIN image_tag_map itm 
ON i.image_id = itm.image_id 
WHERE i.good <> 0 
AND itm.score >= 5 
AND itm.tag_id = ? 
0

怎麼樣?

select image_id from image where good <> 0 and image_id in 
    (select image_id from FROM image_tag_map WHERE tag_id= ? and score>=5) 
    order by good desc