php - MySQL 条件左连接

标签 php mysql

我有两个具有一对多关系的表。地方和促销。一个地方可以有多个促销,这些促销适用于一周中的每一天。

简化(省略了大部分列),这些是表格:

地点

idnum   nombre
--
42      SUBWAY
55376   ANTOJERIA MAKECH
50112   TORTAS BERNAL LAS ORIGINALES DESDE 1960
55185   LA MARINERA

促销

idnum   titulo                  dia     idcliente
135     Pescado Frito 2 x 1     Lunes   55185
136     Pescado Frito 2 x 1     Martes  55185
137     Margaritas 2 x 1        Jueves  55185
138     Tacos 3 x 2             Viernes 55185
139     5 cervezas              Sabado  55185

我想构建一个查询,获取所有地点结果,如果可用,获取相应的促销。这是我到目前为止的查询:

SELECT * FROM (SELECT d.nombre, a.dia, a.descripcion FROM directorio as d LEFT JOIN avisos as a ON d.idnum = a.idcliente WHERE palabras LIKE "%Marinera%" LIMIT 15 OFFSET 0) AS t WHERE t.dia = "Sabado" OR t.dia IS NULL;

当 dia 匹配查询(在本例中为“Sabado”)或当 dia 为 NULL(当该地点没有促销时)时,它工作得很好;但是当这个地方确实有促销但没有一个匹配 dia 时,问题就来了...在这种情况下,我仍然希望在促销列上获得空值的记录。

最佳答案

如果你想在 dia != form "Sabado"时也得到响应,那么你可以使用 CASE WHEN

  SELECT * 
  FROM (
      SELECT d.nombre, case when a.dia = "Sabado"  then a.dia else NULL END, a.descripcion 
      FROM directorio as d 
      LEFT JOIN avisos as a ON d.idnum = a.idcliente 
      WHERE palabras LIKE "%Marinera%" LIMIT 15 OFFSET 0) AS t 
  WHERE t.dia = "Sabado" 
  OR t.dia IS NULL;

这与 max(dia) 用于删除重复的行

  SELECT 
        idnum
      , nombre
      , MAX(dia) as dia
      , descripcion 
  FROM ( 
        SELECT 
              d.idnum
            , d.nombre
            , case when a.dia = "Domingo" then a.dia else NULL END as dia
            , a.descripcion FROM directorio as d 
      LEFT JOIN avisos as a ON d.idnum = a.idcliente 
      WHERE palabras LIKE "%Marinera%"
      LIMIT 15 OFFSET 0) AS t 
  WHERE t.dia = "Domingo" OR t.dia IS NULL

关于php - MySQL 条件左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40821966/

相关文章:

mysql - 存储过程中的 SQL 变量 ORDER BY 子句

php - 使用 PHP 在大型数据库上进行 Cron 作业,需要建议

mysql - 无法重启 MySQL Docker 容器,出现类似 `Can' t open the mysql.plugin table` 和 `Table ' mysql.user' doesn't exist` 的错误

php - 多网关的通用数据库设计

php - PhpStorm 的属性和数据库栏

php - 将 laravel 文件迁移到 xampp 服务器时出错

php - 如何使用 PHP GD 放大图像?

php - htaccess 出现问题(每个页面上都显示一个参数)

javascript - 社交引擎上的自动完成好友列表无法正常工作

php - twitter rss 或以其他方式获取 100 条最新推文