Mysql SQL联接,不确定复杂查询中的确切语法
我试图匹配两位数据,添加到现有查询中 我希望这个问题本身能解释我想做什么。我遇到的问题是在破产时留下p.practices=practices.idMysql SQL联接,不确定复杂查询中的确切语法,mysql,sql,sql-server,Mysql,Sql,Sql Server,我试图匹配两位数据,添加到现有查询中 我希望这个问题本身能解释我想做什么。我遇到的问题是在破产时留下p.practices=practices.id SELECT DISTINCT i.id AS id, i.company AS company, i.insolvencyDate AS insolvency_date, i.cit
SELECT DISTINCT i.id AS id,
i.company AS company,
i.insolvencyDate AS insolvency_date,
i.city AS city,
i.createdOn AS createdOn,
1 AS rank_id,
t.entryCopy AS insolvency_type,
i.businessNature AS business_nature,
p.name AS pract_comp_name,
'I' AS i_type
FROM insolvencies i,
LEFT JOIN practitioners p ON insolvencies.practitioner = practitioners.id,
lookupcopy t
WHERE i.checked = 1
AND t.id = i.insolvencyType
AND i.insolvencyDate >= {ts '2010-01-22 00:00:00'}
AND i.insolvencyDate <= {ts '2011-10-20 00:00:00'}
AND (LOWER(p.name) LIKE '%Hodgsons%')
GROUP BY id
选择不同的i.id作为id,
i、 公司作为公司,
i、 破产日期作为破产日,
i、 城市作为城市,
i、 createdOn作为createdOn,
1作为秩_id,
t、 entryCopy作为U类型,
i、 商业性质作为商业性质,
p、 名称为实际公司名称,
“I”作为I_类型
从破产案一开始,
LEFT JOIN Practices p ON资不抵债。practices=practices.id,
查找拷贝
其中i.checked=1
t.id=i.unsolvencytype
和i.UnsolvencyDate>={ts'2010-01-22 00:00:00'}
和i.insolvencyDate您需要删除破产i,
后的逗号,以使左联接
应用于该表,否则左联接
将被视为交叉应用的独立表,这是无效的:
FROM insolvencies i
-- ^ remove comma
LEFT JOIN...
问题是WHERE子句引用了左联接表
WHERE i.checked = 1
AND t.id = i.insolvencyType
AND i.insolvencyDate >= {ts '2010-01-22 00:00:00'}
AND i.insolvencyDate <= {ts '2011-10-20 00:00:00'}
AND (LOWER(p.name) LIKE '%Hodgsons%')
其中i.checked=1
t.id=i.unsolvencytype
和i.UnsolvencyDate>={ts'2010-01-22 00:00:00'}
i.破产日期这里有许多问题。首先,我去掉逗号并正确地加入了lookupcopy。我不是100%确定你的最终目标,但从以下几点开始:
SELECT DISTINCT i.id AS id,
i.company AS company,
i.insolvencyDate AS insolvency_date,
i.city AS city,
i.createdOn AS createdOn,
1 AS rank_id,
t.entryCopy AS insolvency_type,
i.businessNature AS business_nature,
p.name AS pract_comp_name,
'I' AS i_type
FROM insolvencies i
INNER JOIN lookupcopy t on (t.id = i.insolvencyType)
LEFT JOIN practitioners p ON i.practitioner = p.id
WHERE i.checked = 1
AND i.insolvencyDate >= {ts '2010-01-22 00:00:00'}
AND i.insolvencyDate <= {ts '2011-10-20 00:00:00'}
AND (LOWER(p.name) LIKE '%Hodgsons%')
GROUP BY id
选择不同的i.id作为id,
i、 公司作为公司,
i、 破产日期作为破产日,
i、 城市作为城市,
i、 createdOn作为createdOn,
1作为秩_id,
t、 entryCopy作为U类型,
i、 商业性质作为商业性质,
p、 名称为实际公司名称,
“I”作为I_类型
破产一案
内部联接查找副本t on(t.id=i.UnsolvencyType)
在i.practices=p.id上左连接practices p
其中i.checked=1
和i.UnsolvencyDate>={ts'2010-01-22 00:00:00'}
i.UnsolvencyDate我想你在寻找这样的东西:
SELECT DISTINCT i.id AS id
, i.company AS company
, i.insolvencyDate AS insolvency_date
, i.city AS city
, i.createdOn AS createdOn
, 1 AS rank_id
, t.entryCopy AS insolvency_type
, i.businessNature AS business_nature
, p.name AS pract_comp_name
, 'I' AS i_type
FROM insolvencies i
LEFT JOIN practitioners p ON insolvencies.practitioner = practitioners.id
CROSS JOIN lookupcopy t
WHERE i.checked = 1
AND t.id = i.insolvencyType
AND i.insolvencyDate >= {ts '2010-01-22 00:00:00'}
AND i.insolvencyDate <= {ts '2011-10-20 00:00:00'}
AND (LOWER(p.name) LIKE '%Hodgsons%')
GROUP BY id
选择不同的i.id作为id
,即公司作为公司
,i.破产日期作为破产日
,即城市为城市
,i.createdOn作为createdOn
,1作为秩_id
,t.entryCopy作为U类型
,即商业性质为商业性质
,p.名称为实际公司名称
“I”作为I_类型
破产一案
LEFT JOIN Practices p ON资不抵债。Practices=Practices.id
交叉连接查找拷贝
其中i.checked=1
t.id=i.unsolvencytype
和i.UnsolvencyDate>={ts'2010-01-22 00:00:00'}
i.insolvencyDate在MySQL中的中,交叉连接在语法上等同于内部连接(它们可以相互替换)
因此,在SQL读取后编写的内容有点有趣是的,但最好了解它们的区别并根据标准使用。并不是所有的RDBMS都是MYSQL:)Conrad说,这是一个完美的例子,说明了为什么混合使用ANSI-86和ANSI-92样式的联接在我的技术水平上可能不是一个很好的理想帮助。谢谢