MySQL查找同一表中是否存在具有相同值的其他行
我对MySQL比较陌生,需要一些指导。我有一张叫做“事件”的桌子,看起来像这样MySQL查找同一表中是否存在具有相同值的其他行,mysql,join,subquery,Mysql,Join,Subquery,我对MySQL比较陌生,需要一些指导。我有一张叫做“事件”的桌子,看起来像这样 --------------------------------------------------------------- | event_id | promoter_id | venue_id | event_date | attendance | --------------------------------------------------------------- | 0 |
---------------------------------------------------------------
| event_id | promoter_id | venue_id | event_date | attendance |
---------------------------------------------------------------
| 0 | 5 | 1 | 2013-05-30 | 400 |
| 1 | 2 | 6 | 2013-06-09 | 104 |
| 2 | 9 | 1 | 2013-05-30 | 300 |
| 3 | 1 | 3 | 2013-06-09 | 205 |
| 4 | 3 | 2 | 2013-06-01 | 175 |
| 5 | 5 | 2 | 2013-06-01 | 295 |
---------------------------------------------------------------
我正在寻找与其他活动在同一地点和日期举行的促销活动的出席情况。在本例中,我想从查询中得到的是Promotor 5所有共享相同地点和日期的活动的出席情况
--------------
| attendance |
--------------
| 400 |
| 295 |
--------------
这个查询对我来说是合乎逻辑的,但很明显我遗漏了一些东西,因为它生成了一个语法错误
SELECT t1.attendance FROM events t1 WHERE promoter_id=5
JOIN (SELECT event_id, venue_id, event_date, attendance FROM events
WHERE promoter_id!=5) t2
ON t1.event_id=t2.event_id
WHERE t1.venue_id=t2.venue_id
AND t1.event_date=t2.event_date;
如果能得到任何帮助,我将不胜感激,因为我自己的研究还没有达到我所需要的程度。我更愿意在不创建视图的情况下执行此操作,因为在得到结果后,随着表的增长,我必须删除视图。我觉得这可能会对性能造成影响,特别是当我打算为每个发起人运行此查询时
谢谢如果我理解正确的话,您将400和295包括在内,因为其他推广人在同一天在同一地点举办了活动。如果是这种情况,请尝试以下方法:
SELECT attendance
FROM events
WHERE promoter_id = 5 AND (venue_id, event_date) IN (
SELECT venue_id, event_date
FROM events
WHERE promoter_id <> 5)
请参阅。我知道有很多答案,但要解决您的语法错误: 您在加入之前正在执行WHERE子句。 where子句也不明确,因为它在表t1和t2中都指向promotor_id 试试这个:
/* Select sum of attendance columns */
SELECT (t1.attendance + t2.attendance) attendance
FROM events t1
/*Specify Join immediately after FROM clause*/
JOIN events t2
/* declare all join specific conditionals before initiating WHERE clause */
ON t1.venue_id = t2.venue_id
AND t1.event_date = t2.event_date
AND t2.promoter_id != 5
WHERE t1.promoter_id = 5;
上述查询将为您提供:
--------------
| attendance |
--------------
| 700 |
| 470 |
--------------
---------------------------------------
| attendance | attendance | venue_id |
---------------------------------------
| 400 | 300 | 1 |
| 295 | 175 | 2 |
---------------------------------------
要将其分解,您可以分解考勤字段的总和
SELECT t1.attendance, t2.attendance, t1.venue_id
FROM events t1
/*Specify Join immediately after FROM clause*/
JOIN events t2
/* declare all join specific conditionals before initiating WHERE clause */
ON t1.venue_id = t2.venue_id
AND t1.event_date = t2.event_date
AND t2.promoter_id != 5
WHERE t1.promoter_id = 5;
上述查询将为您提供:
--------------
| attendance |
--------------
| 700 |
| 470 |
--------------
---------------------------------------
| attendance | attendance | venue_id |
---------------------------------------
| 400 | 300 | 1 |
| 295 | 175 | 2 |
---------------------------------------