mysql - 如果列有值 A,如何获取记录,如果没有则为 B?

标签 mysql sql

我在 mysql 数据库中有一个表。喜欢

+-----+------+------+--------+  
| id  | p_id | lang |  title |
+-----+------+------+--------+  
| 1   |   1  |  en  |  eng1  |
| 2   |   1  |  fr  |  fr1   |
| 3   |   2  |  en  |  eng2  |
+-----+------+------+--------+

我想选择 lang = frP_id 记录。如果任何 p_id 在 fr 中没有记录,则选择 en 的记录。 喜欢

+-----+------+------+--------+  
| id  | p_id | lang |  title |
+-----+------+------+--------+
| 2   |   1  |  fr  |  fr1   |
| 3   |   2  |  en  |  eng2  |
+-----+------+------+--------+

这可能吗?

我正在使用 PHP、MySQL 和 Joomla。

编辑: 1 : 每个 p_id 可以有超过 2 行,有 diff lang,比如 p_id = 1

  +-----+------+------+--------+  
    | id  | p_id | lang |  title |
    +-----+------+------+--------+  
    | 1   |   1  |  en  |  eng1  |
    | 2   |   1  |  fr  |  fr1   |
    | 3   |   2  |  en  |  eng2  |
    | 4   |   1  |  de  |  de1   |
    +-----+------+------+--------+

2 : 可以保证每个 p_id 在 lang = en-GB 中都有一个 raw

最佳答案

Mysql 查询(未测试)

SELECT DISTINCT a.p_id
FROM myTable a
WHERE a.lang = 'fr'
UNION
SELECT DISTINCT b.p_id
FROM myTable b
WHERE b.lang = 'en'
AND NOT EXISTS
(
 SELECT 1
 FROM myTable c
 WHERE c.lang = 'fr'
 AND c.p_id = b.p_id
)

我取出所有的 fr 行,然后在不存在 fr 行的地方添加所有的 en。

关于mysql - 如果列有值 A,如何获取记录,如果没有则为 B?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27058108/

相关文章:

Mysql - 获得最高和最低 5 个结果

mysql - ORDER BY <特定倍数>的意义

WHERE 子句中的 SQLite 计算列似乎正在工作(?)

mysql - 使用 mysql 函数 GROUP_CONCAT() 时出现双逗号冲突

php - 我应该如何在 php 脚本中比较两种不同的产品价格?

mysql - 使用 MySQL Workbench 更新同一列中的多个值

PHP INSERT 不工作,可能是坏数组?

MySQL AFTER INSERT 触发器 - 使用新值选择 INTO 不起作用

mysql - 生成同一列中不存在的随机值

sql - 在数据库中标记重复项