SQL - 从两个不同的表中选择ID

时间:2012-11-06 16:45:51

标签: php sql join

我有两个表,其中包含不同操作的日志记录信息。我想从两个日志表中选择信息并显示它。我无法修改应用程序,因此无法修改表结构。假设我想要30条记录,我想我可以编写某种连接查询,它只会按时间顺序返回每个表的ID。然后,我可以简单地运行两个单独的查询,从各个表中选择这些ID。我不知道该怎么做,或者你甚至可以做到这一点,我有点不知所措。有人可以帮忙吗?如果有一个更清洁的解决方案,我也很高兴听到这个,我在PHP工作。

示例数据:

魔术选择? FROM table1 MAGIC JOIN table2 MAGICALLY ORDER BY date DESC LIMIT 3

表1

|------|-------|------------|
| id   | date  | other data |
|------|-------|------------|
| 1    | 8     | ...        |
| 2    | 5     | ...        |
| 3    | 3     | ...        |
|------|-------|------------|

表2

|------|-------|------------|
| id   | date  | other data |
|------|-------|------------|
| 1    | 6     | ...        |
| 2    | 4     | ...        |
| 3    | 12    | ...        |
|------|-------|------------|

输出

|-----------|-----------|
| table1_id | table2_id |
|-----------|-----------|
| NULL      | 3         |
| 1         | NULL      |
| NULL      | 1         |
|-----------|-----------|

提前致谢。

3 个答案:

答案 0 :(得分:3)

SELECT table1_id, table2_id
FROM
(
    SELECT id AS table1_id, NULL AS table2_id, ctime AS time
    FROM Table1
    UNION ALL
    SELECT NULL AS table1_id, id AS table2_id, date AS time
    FROM Table2
) x
ORDER BY time DESC
LIMIT 3

SQL Fiddle example

答案 1 :(得分:1)

我想我的阅读方式与其他答案不同。听起来像你想要一个按时间排序的前30个ID的列表,而不是关心他们来自哪个表。

Select table1_id, table2_id From 
(
   Select ID as table1_id, NULL as table2_id, Date From Table1
   UNION ALL
   Select NULL as table1_id, ID as table2_id, Date From Table2 
)
Order by Date DESC 
Limit 30

答案 2 :(得分:0)

SELECT table1.id AS table1_id, table2.id AS table2_id 
FROM table1 
JOIN table2 
ON table1.id = table2.id 
ORDER BY table2.date DESC