SQL联接无法正常工作

时间:2017-02-27 18:46:34

标签: sql join

我是JOINS新手并测试我的查询,但它不适合我...

情况:

数据库包含以下列:

  • 链接(包含唯一数据)
  • cl_link(包含链接和猫之间的关系)
  • 猫(猫。描述
  • 图片(包含一个链接的多个图片)
  • cfvalues(包含多个自定义fiels的值
  • customfields(包含多个自定义字段)

我正在使用以下查询,但联接对我不起作用。因为我只获得一张图像,而有时会有多张图像。而且我只得到一个自定义字段而不是多个而且我没有得到任何cfvalues。

我想JOINS有问题,但我不确定。有人可以帮助我吗?

SQL

SELECT DISTINCT 
rqypj_mt_links.link_name,
rqypj_mt_links.link_desc,
rqypj_mt_links.address,
rqypj_mt_links.city,
rqypj_mt_links.state,
rqypj_mt_links.country,
rqypj_mt_links.postcode,
rqypj_mt_links.telephone,
rqypj_mt_links.fax,
rqypj_mt_links.email,
rqypj_mt_links.website,
rqypj_mt_links.price,
rqypj_mt_links.lat,
rqypj_mt_links.lng,
rqypj_mt_links.zoom,
rqypj_mt_cats.cat_name,
rqypj_mt_images.filename,
rqypj_mt_cfvalues.value,
rqypj_mt_customfields.caption
FROM rqypj_mt_links
LEFT JOIN rqypj_mt_cl
ON rqypj_mt_links.link_id = rqypj_mt_cl.link_id
LEFT JOIN rqypj_mt_cats
ON rqypj_mt_cl.cat_id = rqypj_mt_cats.cat_id
LEFT JOIN rqypj_mt_images
ON rqypj_mt_links.link_id = rqypj_mt_images.link_id
LEFT JOIN rqypj_mt_cfvalues
ON rqypj_mt_links.link_id = rqypj_mt_cfvalues.link_id
LEFT JOIN rqypj_mt_customfields
ON rqypj_mt_customfields.cf_id = rqypj_mt_customfields.cf_id LIMIT 100

提前致谢! Jelte

2 个答案:

答案 0 :(得分:1)

你的最后状况看起来不正确:

 on rqypj_mt_customfields.cf_id = rqypj_mt_customfields.cf_id 

转换为1=1

不应该是:

 on rqypj_mt_customfields.cf_id = rqypj_mt_cfvalues.cf_id 

答案 1 :(得分:0)

可能是因为您没有订单并且正在使用限制。

将其更改为

order by rqypj_mt_links.link_id, rqypj_mt_cl.cat_id
limit 100

然后你的同一个链接的多张图片应该在一起。

另外,请考虑使用别名来使代码更易于阅读:

SELECT DISTINCT 
  links.link_name,
  links.link_desc,
  links.address,
  links.city,
  links.state,
  links.country,
  links.postcode,
  links.telephone,
  links.fax,
  links.email,
  links.website,
  links.price,
  links.lat,
  links.lng,
  links.zoom,
  cats.cat_name,
  images.filename,
  cfvalues.value,
  --custom.caption
FROM rqypj_mt_links links
LEFT JOIN rqypj_mt_cl cl ON links.link_id = cl.link_id
LEFT JOIN rqypj_mt_cats cats ON cl.cat_id = cats.cat_id
LEFT JOIN rqypj_mt_images images ON links.link_id = images.link_id
LEFT JOIN rqypj_mt_cfvalues cfvalues ON links.link_id = cfvalues.link_id
--LEFT JOIN rqypj_mt_customfields custom ON custom.cf_id = custom.cf_id
ORDER BY links.link_id, cats.cat_id
LIMIT 100