mysql - 使用表达式从 mysql 表中选择

标签 mysql

我正在使用 Mysql,但我遇到了一个简单的问题。 如果一个条件为真或另一个条件为真,我需要从表中选择数据。

我尝试的一个选择会返回数据,但数据比应有的要多得多。事实上,该表只包含 66 条记录,但我的查询返回 177 条记录。我误解了一些事情。

如果['city'等于一个值并且'type'是golden]或'type'位于名为'charms'的类别中,我需要选择数据

我尝试过这个查询

SELECT b.* 
FROM bubbles b, bubble_types bt 
WHERE 
  b.city = 10 
  AND b.type = 'golden' 
  OR bt.category = 'charm' 
  AND bt.type = b.type;

还有这个(它根本不起作用,但可能更接近目标?)

SELECT b.* 
IF(b.city = 10, b.type = 'golden'), 
IF(bt.category = 'charm', bt.type = b.type) 
FROM bubbles b, bubble_types bt;

希望我想要的有意义吗?

我应该从城市 10 中的 66 个“金色”气泡或那些类型字段将其归为“魅力”类别的气泡中获取大约 10 行。

谢谢;

编辑 bubble_types 的示例表数据:

+----+----------+------------+ 
| id | category | type       | 
+----+----------+------------+ 
| 1  | bubble   | golden     | 
| 2  | charm    | teleport   | 
| 3  | charm    | blow       | 
| 4  | badge    | reuser     | 
| 5  | badge    | winner     | 
| 6  | badge    | loothunter | 
| 7  | charm    | freeze     | 
| 8  | badge    | reuser     | 
| 9  | badge    | winner     | 
| 10 | badge    | loothunter | 
+----+----------+------------+ 


mysql> describe bubbles;
+-------------+---------------------+------+-----+---------+----------------+
| Field       | Type                | Null | Key | Default | Extra          |
+-------------+---------------------+------+-----+---------+----------------+
| id          | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| city        | bigint(20)          | YES  |     | NULL    |                |
| type        | varchar(32)         | YES  |     | NULL    |                |
| taken_by    | bigint(20)          | YES  |     | NULL    |                |
| taken_time  | bigint(20)          | YES  |     | NULL    |                |
| label       | varchar(256)        | YES  |     | NULL    |                |
| description | varchar(16384)      | YES  |     | NULL    |                |
| created     | datetime            | YES  |     | NULL    |                |
+-------------+---------------------+------+-----+---------+----------------+

最佳答案

你离得太近了!将第一个 go 的“WHERE”-ness 与第二个 go 的括号一起使用(并在 JOIN 中添加适当的 ON 子句):

SELECT b.* 
FROM bubbles b
   JOIN bubble_types bt 
   ON b.type = bt.type
WHERE 
  (b.city = 10 AND b.type = 'golden')
  OR 
  (bt.category = 'charm' AND bt.type = b.type);

问题在于 where 子句中 AND 和 OR 结合性的细节。如有疑问,请使用括号明确表达您的意图。

关于mysql - 使用表达式从 mysql 表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11819640/

相关文章:

php - 使用 mysql 的值创建的 highchart,如何使用 phantomjs 导出它

php - 如何根据分隔键将文本插入数据库

mysql - SQL 建表错误

python - 使用 F 引用 2 个表来更新 python

mysql - 寻找替代 SQL 命令以在两个表中查找相同的值

java - MYSQL SELECT ... FOR UPDATE 不起作用?

mysql - SQL 按距离搜索结果

php - Mysql 使 --secure-file-priv 选项为 NULL

java - JDBC 代码为 MySql 提供 IllegalAccessError

c# - 增加或更新 Entity Framework 的数量