Mysql 如何连接两个表
我有两个表,分别是EventTable和VenueTable 我用对方的prinamrykey作为外键。表结构如下:Mysql 如何连接两个表,mysql,sql,join,Mysql,Sql,Join,我有两个表,分别是EventTable和VenueTable 我用对方的prinamrykey作为外键。表结构如下: EventID|VenueID|EventName 1 | 1 | Event1 2 | 1 | Event2 3 | 2 | Event3 VenueId|EnevtID|VenueNAme 1 | 1 | Venue1 2 | 2 | Venue2 VenueID |
EventID|VenueID|EventName
1 | 1 | Event1
2 | 1 | Event2
3 | 2 | Event3
VenueId|EnevtID|VenueNAme
1 | 1 | Venue1
2 | 2 | Venue2
VenueID | VenueName | EventID | EventName
1 | Venue1 | 1 | Event1
1 | Venue1 | 2 | Event2
2 | Venue2 | 2 | Event2
2 | Venue2 | 3 | Event3
我希望结果如下
EventID|VenueID|EventName
1 | 1 | Event1
2 | 1 | Event2
3 | 2 | Event3
VenueId|EnevtID|VenueNAme
1 | 1 | Venue1
2 | 2 | Venue2
VenueID | VenueName | EventID | EventName
1 | Venue1 | 1 | Event1
1 | Venue1 | 2 | Event2
2 | Venue2 | 2 | Event2
2 | Venue2 | 3 | Event3
我已使用内部联接来执行此操作,但无法获得预期的结果
如何做到这一点
谢谢..这应该可以做到:
select VenueID, VenueName, EventID, EventName
from EventTable, VenueTable
where EventTable.VenueID = VenueTable.VenueID
记住mysql的分隔符吗
SELECT v.VenueID, v.VenueName, v.EventID, e.EventName
FROM VenueTable v
INNER JOIN EventTable e ON (v.EventId = e.EventId)
甚至
SELECT v.VenueID, v.VenueName, v.EventID, e.EventName
FROM VenueTable v, EventTable e
WHERE v.EventId = e.EventId
试试这个:
SELECT
v.VenueID,
v.VenueName,
v.EventID,
e.EventName
FROM
VenueTable v
INNER JOIN
EventTable e
ON (v.EventId = e.EventId)
UNION
SELECT
v.VenueID,
v.VenueName,
v.EventID,
e.EventName
FROM
VenueTable v
INNER JOIN
EventTable e
ON (v.VenueID = e.VenueID)
这模拟了MySQL中的完整外部联接从事件E中选择v.VenuId、v.VenueName、E.EventId、E.EventName,然后在E.EventId=v.EventId上选择E.EventName。在EventTable中,eventId 2位于场馆1,在VenueTable中,venueId 2具有事件2。此外,在您的预期结果中,您提到EventId 2有两个与上表相矛盾的地方。@rohanpanchal-您的查询看起来不错。正如Bhavik提到的,您的表可能缺少一条记录。根据我的说法,您的表结构不正确。您知道,您已经将VenueId和EventId关系分发到两个表。VenueId=2和EventId=2的关系映射在场馆表中,但不映射在事件表中。您最好重新构造表并将所有事件放在事件表中,在EventsTable中映射eventId和VenueId之间的关系,在Vincement表中只允许VenueId和VenueName。这样,连接查询将更容易实现并获得所需的结果。@Bhivik shah-是的EventID 2有两个地点,即Venue1和Venue2事件表Reffer Venue1和Venuetable Reffer EvnetID 2,即地点2。那么如何连接这两个地点???使用ANSI连接而不是传统连接为什么这可以解决OP的问题?如果有两个表,其中任何一个表的最大记录数为3,那么您将返回的带有内部联接的最大记录数为3…我将op解释为请求查询以获得结果,而不是必须使用内部联接,op必须澄清其问题,否则我看不到您的注释的用途?这是相同的查询,仅以OP创建的ANSI形式。结果是问题,而不是查询的样式。**MySQL服务器版本,以便使用接近“完全外部连接**的正确语法在上述查询中没有
完全外部连接
。再试一次-只复制代码块中的脚本。@ Ruhan-SuMIT在他对你的问题的评论中提到,你真的应该考虑改变你的表的设计。在两个表中存储两个键而不创建一个组合键不是一个好主意。@Nicrus-我知道,但我不能更改表bcs的设计,它会影响页面代码,需要在项目中进行大量更改,到目前为止工作正常,只有一件事我需要更改。好的。我的剧本对你有帮助吗?