SQL 查询 - 根据条件显示常用行

SQL Query - displaying common rows based on conditions

我有两个 table,即 TABLE1TABLE2 我无法理解如何根据一些条件从这两个 table 中提取信息。这基本上是我需要的:

我想根据列值从第一个 TABLE1 中获取某些行。 TABLE1中有一列名为timecreated。我想显示 TABLE1 中最近 30 天创建的所有行(时间是 UNIX 时间戳)只有当满足以下条件:

  1. COLUMN1='\core\event\course_viewed' OR
  2. COLUMN2='\core\event\enrol_instance_created' OR
  3. 第 3 列='restore'

现在 TABLE2 的列名称为:ID、全名和简称。我也需要展示这些 ID 列在 TABLE2 中的值与在 TABLE1 中名为 courseid 的列。我想用 fullnameshortname[=74= 显示这些行] 对应于 courseid 被命名为 ID TABLE1.

我尝试了什么?我尝试了以下但似乎不起作用

SELECT TABLE1.*, TABLE2.* FROM TABLE1, TABLE2
WHERE 
(
TABLE1.COLUMN1 = '\core\event\course_viewed'
OR
TABLE1.COLUMN2 = '\core\event\enrol_instance_created'
OR
TABLE1.COLUMN3 = 'restore'
)
AND
TABLE2.COLUMN1 = TABLE1.COLUMN4

样本 Table 1

样本Table 2

期望的结果 table

两项改进将使您的查询正常工作。

  • 当搜索 \ 时,你必须转义它,即如果你想搜索 app\user,请将 app\user 放在 where 子句中。
  • 如果 courseid 始终存在于 table1 中,则使用 INNER JOIN 否则 LEFT JOIN,这消除了我们主要在表 1 上工作的想法。

话虽如此,以下内容应该适用于您的情况。

SELECT TABLE1.*, TABLE2.* 
FROM TABLE1
INNER JOIN TABLE2 ON TABLE2.id = TABLE1.courseid
WHERE TABLE1.timecreated >= UNIX_TIMESTAMP(NOW() - INTERVAL 30 DAY)
    AND (
        TABLE1.COLUMN1 = '\core\event\course_viewed'
        OR TABLE1.COLUMN2 = '\core\event\enrol_instance_created'
        OR TABLE1.COLUMN3 = 'restore'
    )