我的SQL不是';不要将我的列表限制在我想要的实例上

我的SQL不是';不要将我的列表限制在我想要的实例上,sql,mysql,Sql,Mysql,因此,我试图只返回映射表中设置为默认值的记录,但它将该市场中与该项目相关的所有语言设置为默认值。下面就是我正在使用的sql SELECT `teams`.*, `markets`.`title` AS `market`, `markets`.`short_name`, `market_countries`.*, `countries`.`title` AS `country`, `languages`.`title`

因此,我试图只返回映射表中设置为默认值的记录,但它将该市场中与该项目相关的所有语言设置为默认值。下面就是我正在使用的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` 
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,因此提供了具体的定义。