【问题标题】:Help with a joined query (MySQL)连接查询的帮助 (MySQL)
【发布时间】:2024-08-06 03:05:02
【问题描述】:

您好,谁能看到这个查询失败的原因?

SELECT  A.idAd, A.ads_in_Cat, A.title, A.currency, A.price, 
A.in_dpt, A.description, A.featured FROM ads A
LEFT JOIN featured F ON F.ad = A.idAd
INNER JOIN dept D ON D.id_dept = A.in_dpt
INNER JOIN sub_cat_ad S ON S.id_sub_cat = A.ads_in_Cat
INNER JOIN cat_ad C ON C.idCat_ad = S.from_cat_ad 
ORDER BY A.featured DESC LIMIT :limit, :offset

但这一个有效:

SELECT *FROM ads 
LEFT JOIN featured ON featured.ad = ads.idAd
INNER JOIN dept ON dept.id_dept = ads.in_dpt
INNER JOIN sub_cat_ad ON id_sub_cat = ads.ads_in_Cat
INNER JOIN cat_ad ON idCat_ad = sub_cat_ad.from_cat_ad
ORDER BY featured DESC LIMIT :limit, :offset

在第一个中,我不想要“ads”表中的所有列,查询只返回 ...FROM ads A 之前的列。

【问题讨论】:

  • 它是如何失败的?我猜这些只是示例,因为连接似乎已经过时了。
  • 失败是什么意思?它给出了一个错误?或者您期待未返回的列?如果是,哪些列和哪些表?
  • @Martin Smith,在第一个 FROM 广告 A 中,它没有选择连接的列
  • @Boddy 你说的过时是什么意思?
  • @jartaud 除非您将它们放在选择列表中,否则不会(请参阅 VolkerK 的答案)。它们目前(几乎)已过时,因为您没有从中选择任何内容,尽管连接可能会影响返回的行。

标签: php mysql pdo left-join inner-join


【解决方案1】:

如果您指定仅从 A 中选择字段,您将得到:仅从 A 中选择字段。
如果您还需要其他表中的字段,则还必须指定它们。

SELECT
  A.idAd, A.ads_in_Cat, A.title, A.currency, A.price, A.in_dpt, A.description, A.featured,
  F.*,
  D.*,
  S.*,
  C.*
FROM ads A
LEFT JOIN featured F ON F.ad = A.idAd
INNER JOIN dept D ON D.id_dept = A.in_dpt
INNER JOIN sub_cat_ad S ON S.id_sub_cat = A.ads_in_Cat
INNER JOIN cat_ad C ON C.idCat_ad = S.from_cat_ad 
ORDER BY A.featured DESC LIMIT :limit, :offset

【讨论】: