Mysql 合并来自2个不同选择请求的结果(逻辑和)

Mysql 合并来自2个不同选择请求的结果(逻辑和),mysql,Mysql,我在一个数据库中有两个表: $ SELECT * from image +----------+------+-----+ | image_id | good | bad | +----------+------+-----+ | 1 | 2 | 0 | | 2 | 1 | 0 | | 3 | 0 | 0 | | 4 | 1 | 0 | $ SELECT * from image_tag_map +

我在一个数据库中有两个表:

$ 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作为结果。所以这两个命令的混合 图像标识在两个位置的位置。 我试过使用内部连接之类的方法,但找不到有效的方法…

除了使用连接,您还可以使用EXISTS

连接两个表:

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;
加入应该有效

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
你试过这个吗

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;
试一试


你只需要身份证吗?有几种方法

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
)
使用内部联接也应起作用:

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 = ?
怎么样

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
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 = ?
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