选择表A或表B中的所有行

时间:2017-11-02 00:55:18

标签: mysql sql

如果外表ID出现在表A或表B中,我想得到结果行。

我有3个表:eventspdf_resultslive_Results。我想选择pdf_resultslive_Results

的所有活动

我已经尝试过以下查询,但是当两个表中都有结果时它无效。

SELECT
  events.*,
  live_results.id,
  pdf_results.id
FROM events
LEFT JOIN pdf_results
  ON pdf_results.eventId = events.id
LEFT JOIN live_Results
  ON live_Results.eventId = events.id;

这是SQL Fiddle Demo

2 个答案:

答案 0 :(得分:0)

如何使用exists

SELECT e.* 
FROM events e
WHERE EXISTS (SELECT 1 FROM pdf_results pr WHERE pr.eventId = e.id) OR
      EXISTS (SELECT 1 FROM live_Results lr WHERE lr.eventId = e.id);

答案 1 :(得分:0)

您可以加入UNION查询:

SELECT e.*, r.result_type
FROM events AS e
JOIN (SELECT eventId, 'pdf' AS result_type FROM pdf_results
      UNION ALL
      SELECT eventId, 'live' AS result_type FROM live_results) AS r
ON e.id = r.eventId

添加result_type列可以让我们知道它匹配哪个结果表,如果两个匹配,我们会得到两行。

您也可以使用原始查询,然后添加:

WHERE pdf_results.eventId IS NOT NULL OR live_results.eventId IS NOT NULL

当匹配两次时,您不会获得两行,但是您可以从两个eventId列中找出找到的结果表。