mysql - 表比较中的内连接多个条目

标签 mysql sql join

SELECT produkte_eintraege.id, produkte_eintraege.hersteller, produkte_eintraege.titel, produkte_eintraege.img_url 
  FROM produkte_eintraege JOIN produkte_eigenschaften 
    ON produkte_eintraege.id = produkte_eigenschaften.produkte_eintraege_id 
 WHERE (produkte_eigenschaften.eigenschaften_merkmale_id = 1 
    OR produkte_eigenschaften.eigenschaften_merkmale_id = 2) 
   AND (produkte_eigenschaften.eigenschaften_merkmale_id = 3) 
 ORDER by hits DESC

结果=空

SELECT produkte_eintraege.id, produkte_eintraege.hersteller, produkte_eintraege.titel, produkte_eintraege.img_url 
  FROM produkte_eintraege JOIN produkte_eigenschaften 
    ON produkte_eintraege.id = produkte_eigenschaften.produkte_eintraege_id 
 WHERE (produkte_eigenschaften.eigenschaften_merkmale_id = 1 
    OR produkte_eigenschaften.eigenschaften_merkmale_id = 2) 
 ORDER by hits DESC

结果=有效

这部分有什么问题吗?:

AND (produkte_eigenschaften.eigenschaften_merkmale_id = 3)

这是表格:

INSERT INTO `produkte_eigenschaften` (`produkte_eintraege_id`, `eigenschaften_merkmale_id`)
VALUES (1, 2), (7, 1), (1, 3);

这意味着一种产品在此表中有多个条目。

最佳答案

在您的查询中,您有

WHERE (produkte_eigenschaften.eigenschaften_merkmale_id = 1 OR produkte_eigenschaften.eigenschaften_merkmale_id = 2) 
AND (produkte_eigenschaften.eigenschaften_merkmale_id = 3) ORDER by hits DESC

解释您所说的查询

SELECT * 
FROM a join b 
WHERE (a.id=1 OR a.id=2) AND (a.ID=3)

一个值不能同时等于 2 和 3。

解决方案:有两种解决方案可以解决您的问题:

SELECT pe.id, pe.hersteller, pe.titel, pe.img_url 
FROM produkte_eintraege pe JOIN produkte_eigenschaften pe2 ON pe.id = pe2.produkte_eintraege_id 
WHERE (pe2.eigenschaften_merkmale_id = 1 
  OR pe2.eigenschaften_merkmale_id = 2 
  OR pe2.eigenschaften_merkmale_id = 3) ORDER by hits DESC

或者您可以只使用IN

SELECT pe.id, pe.hersteller, pe.titel, pe.img_url FROM produkte_eintraege pe JOIN produkte_eigenschaften pe2 ON pe.id = pe2.produkte_eintraege_id 
WHERE pe2.eigenschaften_merkmale_id IN (1,2,3) ORDER by hits DESC

希望对您有所帮助。

关于mysql - 表比较中的内连接多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19606748/

相关文章:

linux - 匹配不同文件中的 2 个字段

mysql - 在 MySQL TEXT 字段中搜索以逗号分隔的多个类别

mysql - 检索特定月份的数据

mysql - 获得最高分并在您之后的下一个和上一个得分 3

MySQL 查询 - 赚取超过平均工资

sql - 如何在 PostgreSQL 中表示不确定的日期

Sql:通过连接3张表获取属性

mysql - 将 mySQL 表字段中的所有条目切换为小写

php - 检查用户名是否已存在于数据库 MySQL PHP

sql - 从另一个表的 SELECT 语句更新表中的一行