我的SQL不是';不要将我的列表限制在我想要的实例上
因此,我试图只返回映射表中设置为默认值的记录,但它将该市场中与该项目相关的所有语言设置为默认值。下面就是我正在使用的sql我的SQL不是';不要将我的列表限制在我想要的实例上,sql,mysql,Sql,Mysql,因此,我试图只返回映射表中设置为默认值的记录,但它将该市场中与该项目相关的所有语言设置为默认值。下面就是我正在使用的sql SELECT `teams`.*, `markets`.`title` AS `market`, `markets`.`short_name`, `market_countries`.*, `countries`.`title` AS `country`, `languages`.`title`
SELECT `teams`.*,
`markets`.`title` AS `market`,
`markets`.`short_name`,
`market_countries`.*,
`countries`.`title` AS `country`,
`languages`.`title` AS `language`,
`languages`.`short_code`,
`status`.`title` AS `status`,
`team_types`.`title` AS `type`,
`market_languages`.*
FROM `teams`
JOIN `markets` ON teams.market_id = markets.id
LEFT JOIN `market_countries` ON markets.id = market_countries.market_id
LEFT JOIN `countries` ON countries.id = market_countries.country_id
LEFT JOIN `languages` ON languages.id = teams.language_id
LEFT JOIN `status` ON teams.status_id = status.id
JOIN `team_types` ON team_types.id = teams.type_id
JOIN `market_languages` ON teams.market_id = market_languages.market_id
WHERE (market_languages.is_default = 1)
AND (teams.status_id = 3)
GROUP BY `teams`.`id`
ORDER BY `teams`.`order_id` ASC, `teams`.`status_id` ASC
现在,我正在获取特定的列,并加入到一个市场和语言中,但还有另一个与市场和语言相关的表,这是默认语言。不幸的是,它说两种语言都是默认的,而在db中,这显然只是该市场的一种语言默认值。因此,经过更多的努力后,我找到了我的解决方案,最初我做的是单一连接,希望从该语言中获得良好的回报,但市场出现了错误。因此,我对复杂连接进行了一些搜索,并在www.bryanwebconsulting.com/blog/Outer Join的多个字段上找到了一个很好的资源 因此,在阅读之后,我对sql进行了如下修改:
SELECT `teams`.*,
`markets`.`title` AS `market`,
`markets`.`short_name`,
`market_countries`.*,
`countries`.`title` AS `country`,
`languages`.`title` AS `language`,
`languages`.`short_code`,
`status`.`title` AS `status`,
`team_types`.`title` AS `type`,
`market_languages`.*
FROM `teams`
INNER JOIN `markets` ON teams.market_id = markets.id
LEFT JOIN `market_countries` ON markets.id = market_countries.market_id
LEFT JOIN `countries` ON countries.id = market_countries.country_id
LEFT JOIN `languages` ON languages.id = teams.language_id
LEFT JOIN `status` ON teams.status_id = status.id
INNER JOIN `team_types` ON team_types.id = teams.type_id
INNER JOIN `market_languages` ON ( teams.language_id = market_languages.language_id
AND teams.market_id = market_languages.market_id)
WHERE (market_languages.is_default = 1)
AND (teams.status_id = 3)
GROUP BY `teams`.`id`
ORDER BY `teams`.`order_id` ASC, `teams`.`status_id` ASC
因此,是的,您可以使用和“和”进行更详细的连接
希望这对其他人也有帮助,我想我现在可以更彻底地解决这个问题。如果不知道您的表结构,就很难知道出了什么问题。特别是,不同表之间的关系是什么(1:1,1:many,many:many)?表A的单元格1与表B相关,表A的单元格2与表C相关。但是,B和C具有一对多关系,其中表A与两个表都具有一对一关系。问题源于从表a中获取与表b相关的主记录,但表C确定了第二层定义。我希望我能在不透露问题本质的情况下多作解释。但总而言之,有一个表D定义了与表B相关的主表单表C,因此提供了具体的定义。