我在加入牌桌时不是很有经验,所以这可能是我加入牌桌的结果。我不太明白为什么这个查询会重复结果。例如,这应该只返回3个结果,因为我只有3行用于该特定作业和修订,但是它返回6,重复项与前3个完全相同。
SELECT
checklist_component_stock.id,
checklist_component_stock.job_num,
checklist_revision.user_id,
checklist_component_stock.revision,
checklist_category.name as category,
checklist_revision.revision_num as revision_num,
checklist_revision.category as rev_category,
checklist_revision.per_workorder_number as per_wo_num,
checklist_component_stock.wo_num_and_date,
checklist_component_stock.posted_date,
checklist_component_stock.comp_name_and_number,
checklist_component_stock.finish_sizes,
checklist_component_stock.material,
checklist_component_stock.total_num_pieces,
checklist_component_stock.workorder_num_one,
checklist_component_stock.notes_one,
checklist_component_stock.signoff_user_one,
checklist_component_stock.workorder_num_two,
checklist_component_stock.notes_two,
checklist_component_stock.signoff_user_two,
checklist_component_stock.workorder_num_three,
checklist_component_stock.notes_three,
checklist_component_stock.signoff_user_three
FROM checklist_component_stock
LEFT JOIN checklist_category ON checklist_component_stock.category
LEFT JOIN checklist_revision ON checklist_component_stock.revision = checklist_revision.revision_num
WHERE checklist_component_stock.job_num = 1000 AND revision = 1;
表格结构:
checklist_category
checklist_revision
checklist_component_stock
答案 0 :(得分:2)
该行
LEFT JOIN checklist_category ON checklist_component_stock.category
肯定应该像
LEFT JOIN checklist_category ON checklist_component_stock.category = checklist_category.category
大多数其他dbms会报告语法错误,但MySQL将checklist_component_stock.category视为布尔值。对于MySQL,布尔值是一个数字,对于FALSE为0,对于TRUE为!= 0。因此,每个checklist_component_stock类别!= 0都连接到checklist_category中的所有记录。
答案 1 :(得分:0)
首先检查您的查询,因为您的第一个左连接中缺少连接。另外,如果您只想从查询中获取唯一行,请在选择...
之后使用distinct答案 2 :(得分:0)
除了修正Thorsten Kettner的建议外,修改后的外键也没有了。我将checklist_component_stock.revision中的修订引用到checklist_revision.revision_num,而我应该将它引用到checklist_revision.id。