我非常擅长创建MySQL查询并需要一些帮助。我需要创建一个由cron作业每周一次触发的bash文件 - 查询两个表,抓取两个表中用户ID匹配的数据,并将选择数据添加到CSV导出文件。我希望CSV以逗号分隔。现在最好的我可以将它分开。
我在运行此查询时遇到的问题是我的语法(我知道这是错误的,因为我只是在网上从各种文章中窃取了片段)。我确实让每个数据库查询分开工作(从一个表中获取一个查询,另一个表中另一个查询)。现在我需要将它们组合起来只抓取我需要的数据。
这是我当前(非工作)的查询:
#!/bin/bash
mysql -u USERNAME --password=PASSWORD --database=xxxx_DBNAME --execute='SELECT `xxxx_videotraining_user.user_id`, `xxxx_videotraining_user.training_title`, `xxxx_videotraining_user.status`, `xxxx_users.id`, `xxxx_users.name`, `xxxx_users.user_employer`, `xxxx_users.user_ss_number` WHERE `xxxx_videotraining_user.user_id` = `xxxx_users.id` AND `xxxx_videotraining_user.status` = "Completed" AND `xxxx_users.user_ss_number` > "1" ORDER BY `xxxx_videotraining_user.user_id` LIMIT 0, 10000 AND ' -C > /home/xxxx/subs/vtc/DB_EXPORTS/xxxx_videotraining_completed.csv
我认为你可以在这里看到我想要完成的任何事情 - 非常感谢任何帮助!
答案 0 :(得分:0)
我认为AND不应该在这里:
LIMIT 0, 10000 AND
答案 1 :(得分:0)
看起来你似乎错过了你的FROM子句,有一个尾随的AND子句(如其他答案所述),并且引用的内容不正确。这看起来像是您的原始查询:
SELECT `xxxx_videotraining_user.user_id`,
`xxxx_videotraining_user.training_title`,
`xxxx_videotraining_user.status`,
`xxxx_users.id`,
`xxxx_users.name`,
`xxxx_users.user_employer`,
`xxxx_users.user_ss_number`
WHERE `xxxx_videotraining_user.user_id` = `xxxx_users.id` AND
`xxxx_videotraining_user.status` = "Completed" AND
`xxxx_users.user_ss_number` > "1"
ORDER BY `xxxx_videotraining_user.user_id`
LIMIT 0, 10000 AND
我认为你想要添加FROM子句,分别引用表和字段,并删除尾随的AND,得到类似的东西:
SELECT `xxxx_videotraining_user`.`user_id`,
`xxxx_videotraining_user`.`training_title`,
`xxxx_videotraining_user`.`status`,
`xxxx_users`.`id`,
`xxxx_users`.`name`,
`xxxx_users`.`user_employer`,
`xxxx_users`.`user_ss_number`
FROM `xxxx_users`,
`xxxx_videotraining_user`
WHERE `xxxx_videotraining_user`.`user_id` = `xxxx_users`.`id` AND
`xxxx_videotraining_user`.`status` = "Completed" AND
`xxxx_users`.`user_ss_number` > "1"
ORDER BY `xxxx_videotraining_user`.`user_id`
LIMIT 0, 10000
还可以采取其他措施来缩短查询的大小并使其更清晰,但这应该可以使其正常运行。
我知道在处理长查询时帮助我的一件事就是像这样格式化它们,将主句分开,这样你就可以看到查询的不同部分。
如果有帮助,请告诉我。