0

我正在尝试从数据库中选择值,但我需要检查另一个数据库中的另一个值。

我创建了这段代码,但只得到 1 个结果,我不知道为什么:

SELECT `id` FROM `mc_region` 
    WHERE `is_subregion` = 'false' 
        AND lastseen < CURDATE() - INTERVAL 20 DAY 
        AND (SELECT id_region FROM mc_region_flags 
                    WHERE flag <> 'expire' 
                    AND id_region = mc_region.id
            ) 
LIMIT 0, 30

我做错了什么?

@Edit
我想我知道为什么这段代码不起作用。在数据库 mc_region_flags 中,并非主数据库中的所有记录都有标志。

我想做以下事情:

1º 选择第一个数据库上的所有记录,其中不是 subregion 并且 lastseen 超过 20 天
2º 检查第一个数据库上的任何结果是否有标记'expire',如果是,它们不包含在结果中。

我不能在 1 个 SQL 代码中做到这一点吗?

@Edit2

我创建了这个模拟FULL JOIN但似乎WHERE不起作用的代码

SELECT *
    FROM mc_region AS r RIGHT OUTER JOIN
         mc_region_flags AS f ON r.id = f.id_region
UNION ALL
    SELECT * from 
        mc_region AS r LEFT OUTER JOIN 
        mc_region_flags AS f
        ON r.id = f.id_region
WHERE r.is_subregion = 'false' 
AND f.flag = 'exipre' 
AND r.lastseen < CURDATE() - INTERVAL 20 DAY

不工作的问题

  1. f.flag不是“过期”
  2. f.lastseen不 > 20 天

结果

4

2 回答 2

0

在内部嵌套选择之前添加:id in (select...)

于 2013-01-27T00:57:01.907 回答
0

更新

SELECT * 
  FROM `mc_region` AS r LEFT JOIN 
       `mc_region_flags` AS f ON r.`id` = f.`id_region`
 WHERE r.`is_subregion` = 'false' AND 
       r.`lastseen` < CURDATE() - INTERVAL 20 DAY AND
       COALESCE(f.`flag`, '-') <> 'expire'
LIMIT 0, 30;
于 2013-01-27T01:01:41.427 回答