Php 尝试添加内部联接时SQL查询不起作用
我有一个SQL语句,我今天终于开始工作了,然后我想添加一个内部连接来返回我的标签,而不是数字,但无法让它工作Php 尝试添加内部联接时SQL查询不起作用,php,mysql,join,Php,Mysql,Join,我有一个SQL语句,我今天终于开始工作了,然后我想添加一个内部连接来返回我的标签,而不是数字,但无法让它工作 SELECT s.ship_name, s.company_name, p.port_name, p.port_country, t1.port_id, t1.port_date, t1.ship_id, t1.arrival_ti
SELECT
s.ship_name,
s.company_name,
p.port_name,
p.port_country,
t1.port_id,
t1.port_date,
t1.ship_id,
t1.arrival_time,
t1.depart_time
FROM
port_days t1
INNER JOIN
ships s, ports p
ON
t1.ship_id = s.ship_id
AND t1.port_id = p.port_id
WHERE
(ship_id = '" . $ship_id . "' OR ship_id = '" . $ship2_id . "')
AND EXISTS (SELECT
port_id, port_date
FROM
port_days t2
WHERE (ship_id = '" . $ship_id . "'
OR ship_id = '" . $ship2_id . "')
AND t1.port_date >= '" . $start_date . "'
AND t1.port_date <= '" . $end_date . "'
AND t1. port_id = t2. port_id
AND t1. port_date = t2. port_date
HAVING COUNT(port_day_id) > 1)
ORDER BY port_date)
我有三张桌子:港口、港口和轮船
我今天写的问题是
SELECT
t1.port_day_id,
t1.port_id,
t1.port_date,
t1.ship_id,
t1.arrival_time,
t1.depart_time
FROM
port_days t1
WHERE
(ship_id = '140' OR ship_id = '145')
AND EXISTS (SELECT
port_id, port_date
FROM
port_days t2
WHERE
(ship_id = '140' OR ship_id = '145')
AND t1.port_date >= '2016-02-01'
AND t1.port_date <= '2016-10-01'
AND t1. port_id = t2. port_id
AND t1. port_date = t2. port_date
GROUP BY port_id, port_date
HAVING COUNT(port_day_id) > 1)
ORDER BY port_date
ship和ports表包含ID和标签
这就是我希望能回来的
{港口名称:南安普敦,港口国家:英格兰,港口日期:2016-06-18,船名:阿卡迪亚,公司名称:p&O邮轮,到达时间:06:30:00,离开时间:16:30:00}
提前谢谢 试试这样
SELECT
s.ship_name,
s.company_name,
p.port_name,
p.port_country,
t1.port_id,
t1.port_date,
t1.ship_id,
t1.arrival_time,
t1.depart_time
FROM port_days t1
INNER JOIN ships s ON t1.ship_id = s.ship_id
INNER JOIN ports p ON t1.port_id = p.port_id
WHERE (t1.ship_id = '" . $ship_id . "' OR t1.ship_id = '" . $ship2_id . "')
AND EXISTS (SELECT
port_id, port_date
FROM
port_days t2
WHERE (ship_id = '" . $ship_id . "'
OR ship_id = '" . $ship2_id . "')
AND t1.port_date >= '" . $start_date . "'
AND t1.port_date <= '" . $end_date . "'
AND t1. port_id = t2. port_id
AND t1. port_date = t2. port_date
HAVING COUNT(port_day_id) > 1)
ORDER BY port_date
请记住,内部连接在port_days和ships之间工作,将其他表字段放在ON部分是没有意义的。因此,如果要关联其他表,则需要第二个内部联接
FROM
port_days t1
INNER JOIN
ships s ON t1.ship_id = s.ship_id
INNER JOIN ports p ON t1.port_id = p.port_id
1 ms sql和mysql是两种不同的产品。你用哪一种?2您遇到的错误消息或意外行为是否属于机密信息?请尝试描述您正在执行的操作。可能有一种更简单的方法来编写查询。我想我很幸运,在我开始学习MySQL时,EXISTS这样的结构并不存在,或者只是没有被使用。撇开性能问题不谈,对于初学者来说,它们似乎只是碍事而已。不要混合使用隐式逗号和显式连接样式。事实上,不要使用逗号连接EVER@Shadow我使用的是mysql,很抱歉造成混乱,谢谢你指出我没有意识到这一点。现在对我来说这很有意义。正如@mhyst提到的拆分加入一样,我更新了我的代码,但当我看到你的答案时,它仍然返回null,我以为是这样的:-